VSE: Create an anchor in the given dataspace
[cps.git] / cps-ri / src / main / resources / schema.sql
1 CREATE TABLE IF NOT EXISTS RELATION_TYPE\r
2 (\r
3     RELATION_TYPE TEXT NOT NULL,\r
4     ID SERIAL PRIMARY KEY\r
5 );\r
6 \r
7 CREATE TABLE IF NOT EXISTS DATASPACE\r
8 (\r
9     ID SERIAL PRIMARY KEY,\r
10     NAME TEXT NOT NULL,\r
11     CONSTRAINT "UQ_NAME" UNIQUE (NAME)\r
12 );\r
13 \r
14 CREATE TABLE IF NOT EXISTS SCHEMA_NODE\r
15 (\r
16     SCHEMA_NODE_IDENTIFIER TEXT NOT NULL,\r
17     ID SERIAL PRIMARY KEY\r
18 );\r
19 \r
20 CREATE TABLE IF NOT EXISTS MODULE\r
21 (\r
22     ID SERIAL PRIMARY KEY,\r
23     NAMESPACE TEXT NOT NULL,\r
24     REVISION TEXT NOT NULL,\r
25     MODULE_CONTENT TEXT NOT NULL,\r
26     DATASPACE_ID BIGINT NOT NULL,\r
27     UNIQUE (DATASPACE_ID, NAMESPACE, REVISION),\r
28     CONSTRAINT MODULE_DATASPACE FOREIGN KEY (DATASPACE_ID) REFERENCES DATASPACE (id) ON UPDATE CASCADE ON DELETE CASCADE\r
29 );\r
30 \r
31 CREATE TABLE IF NOT EXISTS FRAGMENT\r
32 (\r
33     ID BIGSERIAL PRIMARY KEY,\r
34     XPATH TEXT NOT NULL,\r
35     ATTRIBUTES JSONB,\r
36     ANCHOR_NAME TEXT,\r
37     ANCHOR_ID BIGINT REFERENCES FRAGMENT(ID),\r
38     PARENT_ID BIGINT REFERENCES FRAGMENT(ID),\r
39     MODULE_ID INTEGER REFERENCES MODULE(ID),\r
40     DATASPACE_ID INTEGER NOT NULL REFERENCES DATASPACE(ID),\r
41     SCHEMA_NODE_ID INTEGER REFERENCES SCHEMA_NODE(ID),\r
42     UNIQUE (DATASPACE_ID, ANCHOR_NAME, XPATH)\r
43 );\r
44 \r
45 CREATE TABLE IF NOT EXISTS RELATION\r
46 (\r
47     FROM_FRAGMENT_ID BIGINT NOT NULL REFERENCES FRAGMENT(ID),\r
48     TO_FRAGMENT_ID   BIGINT NOT NULL REFERENCES FRAGMENT(ID),\r
49     RELATION_TYPE_ID  INTEGER NOT NULL REFERENCES RELATION_TYPE(ID),\r
50     FROM_REL_XPATH TEXT NOT NULL,\r
51     TO_REL_XPATH TEXT NOT NULL,\r
52     CONSTRAINT RELATION_PKEY PRIMARY KEY (TO_FRAGMENT_ID, FROM_FRAGMENT_ID, RELATION_TYPE_ID)\r
53 );\r
54 \r
55 CREATE INDEX  IF NOT EXISTS "FKI_FRAGMENT_DATASPACE_ID_FK"     ON FRAGMENT USING BTREE(DATASPACE_ID) ;\r
56 CREATE INDEX  IF NOT EXISTS "FKI_FRAGMENT_MODULE_ID_FK"        ON FRAGMENT USING BTREE(MODULE_ID) ;\r
57 CREATE INDEX  IF NOT EXISTS "FKI_FRAGMENT_PARENT_ID_FK"        ON FRAGMENT USING BTREE(PARENT_ID) ;\r
58 CREATE INDEX  IF NOT EXISTS "FKI_FRAGMENT_ANCHOR_ID_FK"        ON FRAGMENT USING BTREE(ANCHOR_ID) ;\r
59 CREATE INDEX  IF NOT EXISTS "PERF_SCHEMA_NODE_SCHEMA_NODE_ID"  ON SCHEMA_NODE USING BTREE(SCHEMA_NODE_IDENTIFIER) ;\r
60 CREATE INDEX  IF NOT EXISTS "FKI_SCHEMA_NODE_ID_TO_ID"         ON FRAGMENT USING BTREE(SCHEMA_NODE_ID) ;\r
61 CREATE INDEX  IF NOT EXISTS "FKI_RELATION_TYPE_ID_FK"          ON RELATION USING BTREE(RELATION_TYPE_ID);\r
62 CREATE INDEX  IF NOT EXISTS "FKI_RELATIONS_FROM_ID_FK"         ON RELATION USING BTREE(FROM_FRAGMENT_ID);\r
63 CREATE INDEX  IF NOT EXISTS "FKI_RELATIONS_TO_ID_FK"           ON RELATION USING BTREE(TO_FRAGMENT_ID);\r
64 CREATE INDEX  IF NOT EXISTS "PERF_MODULE_MODULE_CONTENT"       ON MODULE USING BTREE(MODULE_CONTENT);\r
65 CREATE UNIQUE INDEX  IF NOT EXISTS "UQ_FRAGMENT_XPATH"ON FRAGMENT USING btree(xpath COLLATE pg_catalog."default" text_pattern_ops, dataspace_id);