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