storage-common/pgsql/init.sql
2020-02-06 08:54:51 +01:00

119 lines
3.8 KiB
SQL

-- tables
CREATE TABLE namespaces (
id serial NOT NULL primary key,
iri text NOT NULL,
prefix 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
);
CREATE TABLE triples (
id bigserial NOT NULL primary key,
subject bigint NOT NULL,
predicate bigint NOT NULL,
datatype integer NOT NULL,
value bigint,
creation bigint NOT NULL,
deletion bigint
);
CREATE TABLE texts (
id bigserial NOT NULL primary key,
language bigint,
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;
-- 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 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 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 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);
-- indexes
CREATE INDEX idx_iri ON namespaces USING btree (iri);
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_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 fki_language ON texts USING btree (language);
-- foreign key constraints
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);
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);
ALTER TABLE ONLY triples
ADD CONSTRAINT creation FOREIGN KEY (creation) REFERENCES events(id);
ALTER TABLE ONLY triples
ADD CONSTRAINT deletion FOREIGN KEY (deletion) REFERENCES events(id);
ALTER TABLE ONLY texts
ADD CONSTRAINT language FOREIGN KEY (language) REFERENCES nodes(id);