more flexible triple concept with polymorphic subjects

This commit is contained in:
Helmut Merz 2020-02-06 12:23:43 +01:00
parent e9e71a4591
commit 6a947f1ed6
2 changed files with 57 additions and 54 deletions

View file

@ -1,8 +1,8 @@
-- drop tables in the correct order, avoiding constraint violations
drop table texts;
drop table triples;
drop table events;
drop table texts;
drop table datatypes;
drop table nodes;
drop table datatypes;
drop table namespaces;

View file

@ -6,31 +6,30 @@ CREATE TABLE namespaces (
prefix text
);
CREATE TABLE datatypes (
id smallserial NOT NULL primary key,
dtname text NOT NULL,
tablename text
);
CREATE TABLE nodes (
id bigserial NOT NULL primary key,
namespace bigint,
name text
);
CREATE TABLE datatypes (
id serial NOT NULL primary key,
dtname text NOT NULL,
tablename text,
node bigint
);
CREATE TABLE events (
id bigserial NOT NULL primary key,
tstamp timestamp NOT NULL,
node bigint
tstamp timestamp NOT NULL // ??? better timestamptz?
);
CREATE TABLE triples (
id bigserial NOT NULL primary key,
subject bigint NOT NULL,
stype smallint NOT NULL,
svalue bigint NOT NULL,
predicate bigint NOT NULL,
datatype integer NOT NULL,
value bigint,
otype smallint NOT NULL,
ovalue bigint,
creation bigint NOT NULL,
deletion bigint
);
@ -41,36 +40,48 @@ CREATE TABLE texts (
text text NOT NULL
);
ALTER TABLE nodes OWNER TO fco;
ALTER TABLE datatypes OWNER TO fco;
ALTER TABLE namespaces OWNER TO fco;
ALTER TABLE triples OWNER TO fco;
ALTER TABLE texts OWNER TO fco;
ALTER TABLE nodes OWNER TO cco;
ALTER TABLE datatypes OWNER TO cco;
ALTER TABLE namespaces OWNER TO cco;
ALTER TABLE triples OWNER TO cco;
ALTER TABLE events OWNER TO cco;
ALTER TABLE texts OWNER TO cco;
-- data
INSERT INTO namespaces (iri, prefix)
VALUES ('http://cyberconcepts.org/cco-common#', 'cco');
INSERT INTO namespaces (iri, prefix)
VALUES ('http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'rdf');
INSERT INTO namespaces (iri, prefix)
VALUES ('http://www.w3.org/2000/01/rdf-schema#', 'rdfs');
INSERT INTO events (tstamp) values (transaction_timestamp());
INSERT INTO nodes (namespace, name) VALUES (1, 'Node'); -- 1
INSERT INTO nodes (namespace, name) VALUES (2, 'type'); -- 2
INSERT INTO nodes (namespace, name) VALUES (2, 'Property');-- 3
INSERT INTO nodes (namespace, name) VALUES (2, 'Class'); -- 4
INSERT INTO nodes (namespace, name) VALUES (1, 'Datatype');-- 5
INSERT INTO namespaces (iri, prefix)
VALUES ('http://cyberconcepts.org/cco-common#', 'cco'); -- 1
INSERT INTO namespaces (iri, prefix)
VALUES ('http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'rdf'); -- 2
INSERT INTO namespaces (iri, prefix)
VALUES ('http://www.w3.org/2000/01/rdf-schema#', 'rdfs'); -- 3
INSERT INTO datatypes (dtname, tablename) VALUES ('node', 'nodes'); -- 1
INSERT INTO datatypes (dtname, tablename) VALUES ('string', 'texts'); -- 2
INSERT INTO datatypes (dtname) VALUES ('int'); -- 3
INSERT INTO datatypes (dtname, tablename) VALUES ('namespace', 'namespaces'); -- 1
INSERT INTO datatypes (dtname, tablename) VALUES ('node', 'nodes'); -- 2
INSERT INTO datatypes (dtname, tablename) VALUES ('datatype', 'datatypes'); -- 3
INSERT INTO datatypes (dtname, tablename) VALUES ('event', 'events'); -- 4
INSERT INTO datatypes (dtname, tablename) VALUES ('triple', 'triples'); -- 5
INSERT INTO datatypes (dtname, tablename) VALUES ('text', 'texts'); -- 6
INSERT INTO datatypes (dtname) VALUES ('int'); -- 7
INSERT INTO datatypes (dtname) VALUES ('float'); -- 8
INSERT INTO datatypes (dtname) VALUES ('decimal'); -- 9
INSERT INTO datatypes (dtname) VALUES ('timestamp'); -- 10
INSERT INTO triples (subject, predicate, datatype, value) VALUES (1, 2, 1, 5);
INSERT INTO triples (subject, predicate, datatype, value) VALUES (2, 2, 1, 3);
INSERT INTO triples (subject, predicate, datatype, value) VALUES (3, 2, 1, 4);
INSERT INTO triples (subject, predicate, datatype, value) VALUES (4, 2, 1, 4);
INSERT INTO triples (subject, predicate, datatype, value) VALUES (5, 2, 1, 4);
INSERT INTO nodes (namespace, name) VALUES (2, 'type'); -- 1
INSERT INTO nodes (namespace, name) VALUES (2, 'Property');-- 2
INSERT INTO nodes (namespace, name) VALUES (3, 'Class'); -- 3
-- basic triples: type assignments for
-- type -> Property; Property, Class -> Class
INSERT INTO triples (stype, svalue, predicate, otype, ovalue, creation)
VALUES (2, 1, 2, 2, 2, 1);
INSERT INTO triples (stype, svalue, predicate, otype, ovalue, creation)
VALUES (2, 2, 2, 2, 3, 1);
INSERT INTO triples (stype, svalue, predicate, otype, ovalue, creation)
VALUES (2, 3, 2, 2, 3, 1);
-- indexes
@ -79,16 +90,14 @@ CREATE INDEX idx_prefix ON namespaces USING btree (prefix);
CREATE INDEX idx_node_name ON nodes USING btree (namespace, name);
CREATE INDEX fki_datatype_node ON datatypes USING btree (node);
CREATE INDEX fki_event_node ON events USING btree (node);
CREATE INDEX fki_datatype ON triples USING btree (datatype);
CREATE INDEX fki_stype ON triples USING btree (stype);
CREATE INDEX fki_otype ON triples USING btree (otype);
CREATE INDEX fki_creation ON triples USING btree (creation);
CREATE INDEX fki_deletion ON triples USING btree (deletion);
CREATE INDEX idx_spo ON triples USING btree (subject, predicate, datatype, value);
CREATE INDEX idx_po ON triples USING btree (predicate, datatype, value);
CREATE INDEX idx_os ON triples USING btree (datatype, value, subject);
CREATE INDEX idx_spo ON triples USING btree
(stype, svalue, predicate, otype, ovalue);
CREATE INDEX idx_po ON triples USING btree (predicate, otype, ovalue);
CREATE INDEX idx_os ON triples USING btree (otype, ovalue, stype, svalue);
CREATE INDEX fki_language ON texts USING btree (language);
@ -97,18 +106,12 @@ CREATE INDEX fki_language ON texts USING btree (language);
ALTER TABLE ONLY nodes
ADD CONSTRAINT namespace FOREIGN KEY (namespace) REFERENCES namespaces(id);
ALTER TABLE ONLY datatypes
ADD CONSTRAINT node FOREIGN KEY (node) REFERENCES nodes(id);
ALTER TABLE ONLY events
ADD CONSTRAINT node FOREIGN KEY (node) REFERENCES nodes(id);
ALTER TABLE ONLY triples
ADD CONSTRAINT subject FOREIGN KEY (subject) REFERENCES nodes(id);
ADD CONSTRAINT stype FOREIGN KEY (stype) REFERENCES datatypes(id);
ALTER TABLE ONLY triples
ADD CONSTRAINT predicate FOREIGN KEY (predicate) REFERENCES nodes(id);
ALTER TABLE ONLY triples
ADD CONSTRAINT datatype FOREIGN KEY (datatype) REFERENCES datatypes(id);
ADD CONSTRAINT otype FOREIGN KEY (otype) REFERENCES datatypes(id);
ALTER TABLE ONLY triples
ADD CONSTRAINT creation FOREIGN KEY (creation) REFERENCES events(id);
ALTER TABLE ONLY triples