CREATE TABLE NODES
(
ID NUMBER(8) NOT NULL PRIMARY KEY,
URN VARCHAR2(50) NOT NULL,
Node_Type NUMBER(5) NOT NULL,
Node_Class CHAR NOT NULL,
isDeleted boolean,
Data_Source NUMBER(5),
CONSTRAINT Node_Type_FKEY
FOREIGN KEY (Node_Type) REFERENCES NODETYPE (ID),
CONSTRAINT Data_Source_FKEY
FOREIGN KEY (Data_Source) REFERENCES DATA_SOURCE (ID)
)
;
CREATE INDEX Node_ID_Ind ON NODES(ID);
CREATE INDEX Node_Type_Ind ON NODES(Node_Type);
CREATE INDEX Node_Calss_Ind ON NODES(Node_Class);



CREATE TABLE EDGES
(
ID NUMBER(10) NOT NULL PRIMARY KEY,
IDSrc NUMBER(8) NOT NUL,
IDDst NUMBER(8) NOT NULL,
Direction CHAR NOT NULL,
Relation VARCHAR2(50)
CONSTRAINT IDSrc_FKEY
FOREIGN KEY (IDSrc) REFERENCES NODES (ID),
CONSTRAINT IDDst_FKEY
FOREIGN KEY (IDDst) REFERENCES NODES(ID),
)
;
CREATE INDEX Edges_Ind ON EDGES(ID);
CREATE INDEX Edges_Ind ON EDGES(IDSrc);
CREATE INDEX Edges_Ind ON EDGES(IDDst);
CREATE INDEX Edges_Ind ON EDGES(Direction);



GRAPH_EDGES
(
graph_ID NUMBER(5) NOT NULL,
Edge_ID NUMBER(10) NOT NULL
CONSTRAINT EDGEID_FKEY
FOREIGN KEY (EDGE_ID) REFERENCES EDGES (ID)
)
;
CREATE INDEX graph_nodes_Ind1 ON GRAPH_EDGES(graph_ID);
CREATE INDEX graph_edge_Ind1 ON GRAPH_EDGES(Edge_ID);



GRAPH_NODES
(
graph_ID NUMBER(5) NOT NULL,
Node_ID NUMBER(8) NOT NULL
CONSTRAINT NODEID_FKEY
FOREIGN KEY (NODE_ID) REFERENCES NODES (ID)
)
;
CREATE INDEX graph_nodes_Ind2 ON GRAPH_NODES(graph_ID);
CREATE INDEX graph_edge_Ind2 ON GRAPH_NODES(Node_ID);



CREATE TABLE NODE_TYPE
(
ID NUMBER(5) NOT NULL PRIMARY KEY,
Name VARCHAR2(50) NOT NUL,
child_of NUMBER(5),
NodeType_SynonymsID NUMBER(10)
CONSTRAINT child_of_FKEY2
FOREIGN KEY (child_of) REFERENCES NODE_TYPE (ID),
CONSTRAINT SynonimsID_of_FKEY2
FOREIGN KEY (NodeType_SynonymsID) REFERENCES NodeType_SYNONIMS (ID),
)
;
CREATE INDEX Edges_Ind ON NODE_TYPE(ID);
CREATE INDEX Edges_Ind ON NODE_TYPE(child_of);



CREATE NodeType_SYNONIMS
(
ID NUMBER(10) NOT NULL,
NodeType_Synonym VARCHAR2(50)
)
;
CREATE INDEX NodeType_Syn_Ind ON NodeType_SYNONIMS(ID);



CREATE TABLE ATTRIBUTES
(
ID NUMBER(20) NOT NULL PRIMARY KEY,
NodeID NUMBER(8) NOT NULL,
Attribute_Type_ID NUMBER(5) NOT NULL,
attrOption NUMBER(3) NOT NULL,
DataType VARCHAR2(20)
CONSTRAINT NodeID_FKEY
FOREIGN KEY (NodeID) REFERENCES NODES (ID),
CONSTRAINT Attribute_Type_ID_FKEY
FOREIGN KEY (Attribute_Type_ID) REFERENCES ATTRIBUTE_TYPE (ID),
CONSTRAINT Node_Type_ID_FKEY
FOREIGN KEY (Node_Type_ID) REFERENCES NODETYPE (ID),
)
;
CREATE INDEX Attributes_Ind1 ON ATTRIBUTES(ID);
CREATE INDEX Attributes_Ind2 ON ATTRIBUTES(NodeID);



CREATE TABLE DOUBLEVALUE
(
ID NUMBER(8) NOT NULL PRIMARY KEY,
VALUE NUMBER(10),
NodeID NUMBER(8)

CONSTRAINT DOUBLEVALUE_FKEY
FOREIGN KEY (ID) REFERENCES ATTRIBUTES (ID),
CONSTRAINT NODEID_FKEY
FOREIGN KEY (NodeID) REFERENCES NODES (ID)
)
;
CREATE INDEX SETVALUE_Ind1 ON DOUBLEVALUE(ID);
CREATE INDEX NODE_Ind1 ON DOUBLEVALUE(NodeID);



CREATE TABLE INTEGERVALUE
(
ID NUMBER(8) NOT NULL PRIMARY KEY,
VALUE NUMBER(5),
NodeID NUMBER(8)

CONSTRAINT INTEGERVALUE_FKEY
FOREIGN KEY (ID) REFERENCES ATTRIBUTES (ID),
CONSTRAINT NODEID_FKEY
FOREIGN KEY (NodeID) REFERENCES NODES (ID)
)
;
CREATE INDEX INTEGERVALUE_Ind ON INTEGERVALUE(ID);
CREATE INDEX NODE_Ind2 ON INTEGERVALUE(NodeID);


CREATE TABLE FLOATVALUE
(
ID NUMBER(8) NOT NULL PRIMARY KEY,
VALUE NUMBER(8,3),
NodeID NUMBER(8)

CONSTRAINT FLOATVALUE_FKEY
FOREIGN KEY (ID) REFERENCES ATTRIBUTES (ID),
CONSTRAINT NODEID_FKEY
FOREIGN KEY (NodeID) REFERENCES NODES (ID)
)
;
CREATE INDEX FLOATVALUE_Ind ON FLOATVALUE(ID);
CREATE INDEX NODE_Ind3 ON FLOATVALUE(NodeID);


CREATE TABLE STRINGVALUE
(
ID NUMBER(8) NOT NULL PRIMARY KEY,
VALUE VARCHAR2(50),
NodeID NUMBER(8)

CONSTRAINT STRINGVALUE_FKEY
FOREIGN KEY (ID) REFERENCES ATTRIBUTES (ID),
CONSTRAINT NODEID_FKEY
FOREIGN KEY (NodeID) REFERENCES NODES (ID)
)
;
CREATE INDEX STRINGVALUE_Ind ON STRINGVALUE(ID);
CREATE INDEX NODE_Ind4 ON STRINGVALUE(NodeID);


CREATE TABLE LONGSTRINGVALUE
(
ID NUMBER(8) NOT NULL PRIMARY KEY,
VALUE VARCHAR2(1000),
NodeID NUMBER(8)

CONSTRAINT LONGSTRINGVALUE_FKEY
FOREIGN KEY (ID) REFERENCES ATTRIBUTES (ID),
CONSTRAINT NODEID_FKEY
FOREIGN KEY (NodeID) REFERENCES NODES (ID)
)
;
CREATE INDEX LONGSTRINGVALUE_Ind ON STRINGVALUE(ID);
CREATE INDEX NODE_Ind5 ON LONGSTRINGVALUE(NodeID);


CREATE TABLE ATTRIBUTE_TYPE
(
ID NUMBER(5) NOT NULL PRIMARY KEY,
AttributeName VARCHAR2(30) NOT NULL,
CONSTRAINT ATTRIBUTE_TYPE_FKEY
FOREIGN KEY (ID) REFERENCES ATTRIBUTE_TYPE_CATEGORY (ID)
)
;
CREATE INDEX ATTRIBUTE_TYPE_Ind ON ATTRIBUTE_TYPE(ID);



CREATE TABLE ATTRIBUTE_TYPE_CATEGORY
(
ID NUMBER(5) NOT NULL PRIMARY KEY,
Attrubute_Type_Name VARCHAR2(30) NOT NULL,
Relation VARCHAR2 (50),
child_of NUMBER(5)
CONSTRAINT attrchild_of_FKEY
FOREIGN KEY (child_of) REFERENCES ATTRIBUTE_TYPE_CATEGORY (ID)
)
;
CREATE INDEX ATTRIBUTE_TYPE_CATEGORY_Ind ON ATTRIBUTE_TYPE_CATEGORY(ID);
CREATE INDEX ATTRIBUTE_TYPE_CATEGORY_child_Ind ON
    ATTRIBUTE_TYPE_CATEGORY(child_of);



AT_NT
(
ATTRIBUTE_TYPE NUMBER(5) NOT NULL,
NODE_TYPE NUMBER(5) NOT NULL

CONSTRAINT ATTRIBUTE_TYPE_of_FKEY
FOREIGN KEY (ATTRIBUTE_TYPE) REFERENCES ATTRIBUTE_TYPE (ID),
CONSTRAINT NODE_TYPE_of_FKEY
FOREIGN KEY (NODE_TYPE) REFERENCES NODE_TYPE (ID),
)
;
CREATE INDEX ATTRIBUTE_TYPE__Ind ON AT_NT(ATTRIBUTE_TYPE);
CREATE INDEX NODE_TYPE__Ind ON AT_NT(NODE_TYPE);



CREATE TABLE DATA_SOURCE
(
ID NUMBER(5) NOT NULL PRIMARY KEY,
IDName Varchar2(20) NOT NULL,
FullName varchar2(30) NOT NULL,
Last_Depos_Time Date,
Description varchar2(2000),
Reference varchar2(50),
UserID NUMBER(5),
CONSTRAINT User_ID_FKEY
FOREIGN KEY (User_ID) REFERENCES USER (ID)
)
;


CREATE TABLE User
(
ID NUMBER(5) NOT NULL PRIMARY KEY,
Name Varchar2(20) NOT NULL,
Institute varchar2(20),
email varchar2(30)
)
;