d47f261add96f6f152fe9d5e4b9ec4cd0713e8cc
[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 SCHEMA_SET\r
21 (\r
22     ID SERIAL PRIMARY KEY,\r
23     NAME TEXT NOT NULL,\r
24     DATASPACE_ID BIGINT NOT NULL,\r
25     UNIQUE (NAME, DATASPACE_ID),\r
26     CONSTRAINT SCHEMA_SET_DATASPACE FOREIGN KEY (DATASPACE_ID) REFERENCES DATASPACE(ID) ON UPDATE CASCADE ON DELETE CASCADE\r
27 );\r
28 \r
29 CREATE TABLE IF NOT EXISTS YANG_RESOURCE\r
30 (\r
31     ID SERIAL PRIMARY KEY,\r
32     CHECKSUM TEXT NOT NULL,\r
33     CONTENT TEXT NOT NULL,\r
34     UNIQUE (CHECKSUM)\r
35 );\r
36 \r
37 CREATE TABLE IF NOT EXISTS SCHEMA_SET_YANG_RESOURCES\r
38 (\r
39     SCHEMA_SET_ID BIGINT NOT NULL,\r
40     YANG_RESOURCE_ID BIGINT NOT NULL REFERENCES YANG_RESOURCE(ID),\r
41     CONSTRAINT SCHEMA_SET_RESOURCE FOREIGN KEY (SCHEMA_SET_ID) REFERENCES SCHEMA_SET(ID) ON DELETE CASCADE\r
42 );\r
43 \r
44 CREATE TABLE IF NOT EXISTS MODULE\r
45 (\r
46     ID SERIAL PRIMARY KEY,\r
47     NAMESPACE TEXT NOT NULL,\r
48     REVISION TEXT NOT NULL,\r
49     MODULE_CONTENT TEXT NOT NULL,\r
50     DATASPACE_ID BIGINT NOT NULL,\r
51     UNIQUE (DATASPACE_ID, NAMESPACE, REVISION),\r
52     CONSTRAINT MODULE_DATASPACE FOREIGN KEY (DATASPACE_ID) REFERENCES DATASPACE (id) ON UPDATE CASCADE ON DELETE CASCADE\r
53 );\r
54 \r
55 CREATE TABLE IF NOT EXISTS FRAGMENT\r
56 (\r
57     ID BIGSERIAL PRIMARY KEY,\r
58     XPATH TEXT NOT NULL,\r
59     ATTRIBUTES JSONB,\r
60     ANCHOR_NAME TEXT,\r
61     ANCHOR_ID BIGINT REFERENCES FRAGMENT(ID),\r
62     PARENT_ID BIGINT REFERENCES FRAGMENT(ID),\r
63     MODULE_ID INTEGER REFERENCES MODULE(ID),\r
64     DATASPACE_ID INTEGER NOT NULL REFERENCES DATASPACE(ID),\r
65     SCHEMA_NODE_ID INTEGER REFERENCES SCHEMA_NODE(ID),\r
66     UNIQUE (DATASPACE_ID, ANCHOR_NAME, XPATH)\r
67 );\r
68 \r
69 CREATE TABLE IF NOT EXISTS RELATION\r
70 (\r
71     FROM_FRAGMENT_ID BIGINT NOT NULL REFERENCES FRAGMENT(ID),\r
72     TO_FRAGMENT_ID   BIGINT NOT NULL REFERENCES FRAGMENT(ID),\r
73     RELATION_TYPE_ID  INTEGER NOT NULL REFERENCES RELATION_TYPE(ID),\r
74     FROM_REL_XPATH TEXT NOT NULL,\r
75     TO_REL_XPATH TEXT NOT NULL,\r
76     CONSTRAINT RELATION_PKEY PRIMARY KEY (TO_FRAGMENT_ID, FROM_FRAGMENT_ID, RELATION_TYPE_ID)\r
77 );\r
78 \r
79 CREATE INDEX  IF NOT EXISTS "FKI_FRAGMENT_DATASPACE_ID_FK"     ON FRAGMENT USING BTREE(DATASPACE_ID) ;\r
80 CREATE INDEX  IF NOT EXISTS "FKI_FRAGMENT_MODULE_ID_FK"        ON FRAGMENT USING BTREE(MODULE_ID) ;\r
81 CREATE INDEX  IF NOT EXISTS "FKI_FRAGMENT_PARENT_ID_FK"        ON FRAGMENT USING BTREE(PARENT_ID) ;\r
82 CREATE INDEX  IF NOT EXISTS "FKI_FRAGMENT_ANCHOR_ID_FK"        ON FRAGMENT USING BTREE(ANCHOR_ID) ;\r
83 CREATE INDEX  IF NOT EXISTS "PERF_SCHEMA_NODE_SCHEMA_NODE_ID"  ON SCHEMA_NODE USING BTREE(SCHEMA_NODE_IDENTIFIER) ;\r
84 CREATE INDEX  IF NOT EXISTS "FKI_SCHEMA_NODE_ID_TO_ID"         ON FRAGMENT USING BTREE(SCHEMA_NODE_ID) ;\r
85 CREATE INDEX  IF NOT EXISTS "FKI_RELATION_TYPE_ID_FK"          ON RELATION USING BTREE(RELATION_TYPE_ID);\r
86 CREATE INDEX  IF NOT EXISTS "FKI_RELATIONS_FROM_ID_FK"         ON RELATION USING BTREE(FROM_FRAGMENT_ID);\r
87 CREATE INDEX  IF NOT EXISTS "FKI_RELATIONS_TO_ID_FK"           ON RELATION USING BTREE(TO_FRAGMENT_ID);\r
88 CREATE INDEX  IF NOT EXISTS "PERF_MODULE_MODULE_CONTENT"       ON MODULE USING BTREE(MODULE_CONTENT);\r
89 CREATE UNIQUE INDEX  IF NOT EXISTS "UQ_FRAGMENT_XPATH"ON FRAGMENT USING btree(xpath COLLATE pg_catalog."default" text_pattern_ops, dataspace_id);\r