From 0a8ee1dcb7937fd471595ec5e9e88d6fa0d8d670 Mon Sep 17 00:00:00 2001 From: zhuxu Date: Wed, 21 May 2025 17:58:05 +0800 Subject: [PATCH] add ddl --- base_model/ddl.sql | 115 +++++++++++++++++++++++++++----------- base_model/ddl_v2.sql | 96 ------------------------------- base_model/dml.sql | 2 +- model/ddl_0_gzs.sql | 94 +++++++++++++++++++++++++++++++ model/ddl_1_page.sql | 31 ++++++++++ model/ddl_2_component.sql | 47 ++++++++++++++++ model/ddl_3_topologic.sql | 28 ++++++++++ model/ddl_bay.sql | 11 ++++ 8 files changed, 293 insertions(+), 131 deletions(-) delete mode 100644 base_model/ddl_v2.sql create mode 100644 model/ddl_0_gzs.sql create mode 100644 model/ddl_1_page.sql create mode 100644 model/ddl_2_component.sql create mode 100644 model/ddl_3_topologic.sql create mode 100644 model/ddl_bay.sql diff --git a/base_model/ddl.sql b/base_model/ddl.sql index 50a191d..f7b7f08 100644 --- a/base_model/ddl.sql +++ b/base_model/ddl.sql @@ -1,67 +1,114 @@ CREATE SCHEMA IF NOT EXISTS BASIC; +DROP TABLE IF EXISTS BASIC.ATTRIBUTE_GROUP; + CREATE TABLE BASIC.ATTRIBUTE_GROUP ( - ID SERIAL PRIMARY KEY, + ID BIGSERIAL PRIMARY KEY, GROUP_TYPE VARCHAR(64) NOT NULL DEFAULT '', GROUP_NAME VARCHAR(64) NOT NULL DEFAULT '', - IS_REQUIRED SMALLINT NOT NULL DEFAULT -1, - - UNIQUE(GROUP_TYPE) + IS_PUBLIC SMALLINT NOT NULL DEFAULT -1, + REMARK VARCHAR(128) NOT NULL DEFAULT '', + + UNIQUE (GROUP_TYPE) ); +DROP TABLE IF EXISTS BASIC.DATA_TYPE; + CREATE TABLE BASIC.DATA_TYPE ( - ID SERIAL PRIMARY KEY, + ID BIGSERIAL PRIMARY KEY, DATA_TYPE VARCHAR(64) NOT NULL DEFAULT '', DATABASE_TYPE VARCHAR(32) NOT NULL DEFAULT '', - - UNIQUE(DATA_TYPE) + + UNIQUE (DATA_TYPE) ); +DROP TABLE IF EXISTS BASIC.MODEL_TYPE; + +CREATE TABLE BASIC.MODEL_TYPE ( + ID BIGSERIAL PRIMARY KEY, + MODEL_TYPE VARCHAR(64) NOT NULL DEFAULT '', + MODEL_NAME VARCHAR(64) NOT NULL DEFAULT '', + REMARK VARCHAR(128) NOT NULL DEFAULT '', + + UNIQUE (MODEL_TYPE) +); + +DROP TABLE IF EXISTS BASIC.MODEL_GROUP; + +CREATE TABLE BASIC.MODEL_GROUP ( + ID BIGSERIAL PRIMARY KEY, + MODEL_TYPE_ID BIGINT NOT NULL, + ATTRIBUTE_GROUP_ID BIGINT NOT NULL, + + UNIQUE (MODEL_TYPE_ID, ATTRIBUTE_GROUP_ID), + + FOREIGN KEY (MODEL_TYPE_ID) REFERENCES BASIC.MODEL_TYPE (ID) ON DELETE CASCADE, + FOREIGN KEY (ATTRIBUTE_GROUP_ID) REFERENCES BASIC.ATTRIBUTE_GROUP (ID) +); + +DROP TABLE IF EXISTS BASIC.ATTRIBUTE; + CREATE TABLE BASIC.ATTRIBUTE ( - ID SERIAL PRIMARY KEY, - ATTRIBUTE_GROUP VARCHAR(64) NOT NULL DEFAULT '', + ID BIGSERIAL PRIMARY KEY, ATTRIBUTE VARCHAR(128) NOT NULL DEFAULT '', - DATA_TYPE VARCHAR(64) NOT NULL DEFAULT '', + ATTRIBUTE_NAME VARCHAR(64) NOT NULL DEFAULT '', + DATA_TYPE_ID BIGINT NOT NULL, LENGTH_PRECISION INTEGER NOT NULL DEFAULT -1, SCALE INTEGER NOT NULL DEFAULT -1, IS_NOT_NULL SMALLINT NOT NULL DEFAULT -1, DEFAULT_VALUE VARCHAR(64) NOT NULL DEFAULT '', VALUE_RANGE VARCHAR(128) NOT NULL DEFAULT ',', + IS_VISIBLE SMALLINT NOT NULL DEFAULT -1, - UNIQUE(ATTRIBUTE), - - FOREIGN KEY (DATA_TYPE) REFERENCES BASIC.DATA_TYPE (DATA_TYPE), - FOREIGN KEY (ATTRIBUTE_GROUP) REFERENCES BASIC.ATTRIBUTE_GROUP (GROUP_TYPE) + FOREIGN KEY (DATA_TYPE_ID) REFERENCES BASIC.DATA_TYPE (ID) ); +DROP TABLE IF EXISTS BASIC.MODEL_ATTRIBUTE_PUBLIC; + +CREATE TABLE BASIC.MODEL_ATTRIBUTE_PUBLIC ( + ID BIGSERIAL PRIMARY KEY, + ATTRIBUTE_GROUP_ID BIGINT NOT NULL, + ATTRIBUTE_ID BIGINT NOT NULL, + + UNIQUE (ATTRIBUTE_GROUP_ID, ATTRIBUTE_ID), + + FOREIGN KEY (ATTRIBUTE_GROUP_ID) REFERENCES BASIC.ATTRIBUTE_GROUP (ID), + FOREIGN KEY (ATTRIBUTE_ID) REFERENCES BASIC.ATTRIBUTE (ID) ON DELETE CASCADE +); + +DROP TABLE IF EXISTS BASIC.MODEL_ATTRIBUTE; + +CREATE TABLE BASIC.MODEL_ATTRIBUTE ( + ID BIGSERIAL PRIMARY KEY, + MODEL_TYPE_ID BIGINT NOT NULL, + ATTRIBUTE_GROUP_ID BIGINT NOT NULL, + ATTRIBUTE_ID BIGINT NOT NULL, + + UNIQUE (MODEL_TYPE_ID, ATTRIBUTE_GROUP_ID, ATTRIBUTE_ID), + + FOREIGN KEY (MODEL_TYPE_ID) REFERENCES BASIC.MODEL_TYPE (ID) ON DELETE CASCADE, + FOREIGN KEY (ATTRIBUTE_GROUP_ID) REFERENCES BASIC.ATTRIBUTE_GROUP (ID), + FOREIGN KEY (ATTRIBUTE_ID) REFERENCES BASIC.ATTRIBUTE (ID) ON DELETE CASCADE +); + +DROP TABLE IF EXISTS BASIC.ATTRIBUTE_TEMPLATE; + CREATE TABLE BASIC.ATTRIBUTE_TEMPLATE ( - ID SERIAL PRIMARY KEY, + ID BIGSERIAL PRIMARY KEY, TEMPLATE_NAME VARCHAR(64) NOT NULL DEFAULT '', - ATTRIBUTE_GROUP VARCHAR(64) NOT NULL DEFAULT '', - DATA_TYPE VARCHAR(64) NOT NULL DEFAULT '', + DATA_TYPE_ID BIGINT NOT NULL, LENGTH_PRECISION INTEGER NOT NULL DEFAULT -1, SCALE INTEGER NOT NULL DEFAULT -1, IS_NOT_NULL SMALLINT NOT NULL DEFAULT -1, - DEFAULT_VALUE VARCHAR(64) NOT NULL DEFAULT '', - VALUE_RANGE VARCHAR(128) NOT NULL DEFAULT '', - - FOREIGN KEY (DATA_TYPE) REFERENCES BASIC.DATA_TYPE (DATA_TYPE), - FOREIGN KEY (ATTRIBUTE_GROUP) REFERENCES BASIC.ATTRIBUTE_GROUP (GROUP_TYPE) + + FOREIGN KEY (DATA_TYPE_ID) REFERENCES BASIC.DATA_TYPE (ID) ); -CREATE TABLE BASIC.MODEL_ATTRIBUTE ( - ID SERIAL PRIMARY KEY, - MODEL_TYPE VARCHAR(64) NOT NULL DEFAULT '', - MODEL_NAME VARCHAR(64) NOT NULL DEFAULT '', - ATTRIBUTE_ID INTEGER NOT NULL DEFAULT -1, - REMARK VARCHAR(128) NOT NULL DEFAULT '', - - FOREIGN KEY (ATTRIBUTE_ID) REFERENCES BASIC.ATTRIBUTE (ID) -); +DROP TABLE IF EXISTS BASIC.MODEL_CONNECTIVITY; CREATE TABLE BASIC.MODEL_CONNECTIVITY ( - ID SERIAL PRIMARY KEY, - FROM_MODEL VARCHAR (64) NOT NULL DEFAULT '', + ID BIGSERIAL PRIMARY KEY, + FROM_MODEL VARCHAR(64) NOT NULL DEFAULT '', TO_MODEL VARCHAR(64) NOT NULL DEFAULT '', CONNECTIVITY SMALLINT NOT NULL DEFAULT -1 -); +); \ No newline at end of file diff --git a/base_model/ddl_v2.sql b/base_model/ddl_v2.sql deleted file mode 100644 index 248e0ec..0000000 --- a/base_model/ddl_v2.sql +++ /dev/null @@ -1,96 +0,0 @@ -CREATE SCHEMA IF NOT EXISTS BASIC; - -CREATE TABLE BASIC.ATTRIBUTE_GROUP ( - ID BIGSERIAL PRIMARY KEY, - GROUP_TYPE VARCHAR(64) NOT NULL DEFAULT '', - GROUP_NAME VARCHAR(64) NOT NULL DEFAULT '', - IS_PUBLIC SMALLINT NOT NULL DEFAULT -1, - REMARK VARCHAR(128) NOT NULL DEFAULT '', - - UNIQUE (GROUP_TYPE) -); - -CREATE TABLE BASIC.DATA_TYPE ( - ID BIGSERIAL PRIMARY KEY, - DATA_TYPE VARCHAR(64) NOT NULL DEFAULT '', - DATABASE_TYPE VARCHAR(32) NOT NULL DEFAULT '', - - UNIQUE (DATA_TYPE) -); - -CREATE TABLE BASIC.MODEL_TYPE ( - ID BIGSERIAL PRIMARY KEY, - MODEL_TYPE VARCHAR(64) NOT NULL DEFAULT '', - MODEL_NAME VARCHAR(64) NOT NULL DEFAULT '', - REMARK VARCHAR(128) NOT NULL DEFAULT '', - - UNIQUE (MODEL_TYPE) -); - -CREATE TABLE BASIC.MODEL_GROUP ( - ID BIGSERIAL PRIMARY KEY, - MODEL_TYPE_ID BIGINT NOT NULL, - ATTRIBUTE_GROUP_ID BIGINT NOT NULL, - - UNIQUE (MODEL_TYPE_ID, ATTRIBUTE_GROUP_ID), - - FOREIGN KEY (MODEL_TYPE_ID) REFERENCES BASIC.MODEL_TYPE (ID) ON DELETE CASCADE, - FOREIGN KEY (ATTRIBUTE_GROUP_ID) REFERENCES BASIC.ATTRIBUTE_GROUP (ID) -); - -CREATE TABLE BASIC.ATTRIBUTE ( - ID BIGSERIAL PRIMARY KEY, - ATTRIBUTE VARCHAR(128) NOT NULL DEFAULT '', - ATTRIBUTE_NAME VARCHAR(64) NOT NULL DEFAULT '', - DATA_TYPE_ID BIGINT NOT NULL, - LENGTH_PRECISION INTEGER NOT NULL DEFAULT -1, - SCALE INTEGER NOT NULL DEFAULT -1, - IS_NOT_NULL SMALLINT NOT NULL DEFAULT -1, - DEFAULT_VALUE VARCHAR(64) NOT NULL DEFAULT '', - VALUE_RANGE VARCHAR(128) NOT NULL DEFAULT ',', - IS_VISIBLE SMALLINT NOT NULL DEFAULT -1, - - FOREIGN KEY (DATA_TYPE_ID) REFERENCES BASIC.DATA_TYPE (ID) -); - -CREATE TABLE BASIC.MODEL_ATTRIBUTE_PUBLIC ( - ID BIGSERIAL PRIMARY KEY, - ATTRIBUTE_GROUP_ID BIGINT NOT NULL, - ATTRIBUTE_ID BIGINT NOT NULL, - - UNIQUE (ATTRIBUTE_GROUP_ID, ATTRIBUTE_ID), - - FOREIGN KEY (ATTRIBUTE_GROUP_ID) REFERENCES BASIC.ATTRIBUTE_GROUP (ID), - FOREIGN KEY (ATTRIBUTE_ID) REFERENCES BASIC.ATTRIBUTE (ID) ON DELETE CASCADE -); - -CREATE TABLE BASIC.MODEL_ATTRIBUTE ( - ID BIGSERIAL PRIMARY KEY, - MODEL_TYPE_ID BIGINT NOT NULL, - ATTRIBUTE_GROUP_ID BIGINT NOT NULL, - ATTRIBUTE_ID BIGINT NOT NULL, - - UNIQUE (MODEL_TYPE_ID, ATTRIBUTE_GROUP_ID, ATTRIBUTE_ID), - - FOREIGN KEY (MODEL_TYPE_ID) REFERENCES BASIC.MODEL_TYPE (ID) ON DELETE CASCADE, - FOREIGN KEY (ATTRIBUTE_GROUP_ID) REFERENCES BASIC.ATTRIBUTE_GROUP (ID), - FOREIGN KEY (ATTRIBUTE_ID) REFERENCES BASIC.ATTRIBUTE (ID) ON DELETE CASCADE -); - -CREATE TABLE BASIC.ATTRIBUTE_TEMPLATE ( - ID BIGSERIAL PRIMARY KEY, - TEMPLATE_NAME VARCHAR(64) NOT NULL DEFAULT '', - DATA_TYPE_ID BIGINT NOT NULL, - LENGTH_PRECISION INTEGER NOT NULL DEFAULT -1, - SCALE INTEGER NOT NULL DEFAULT -1, - IS_NOT_NULL SMALLINT NOT NULL DEFAULT -1, - - FOREIGN KEY (DATA_TYPE_ID) REFERENCES BASIC.DATA_TYPE (ID) -); - -CREATE TABLE BASIC.MODEL_CONNECTIVITY ( - ID BIGSERIAL PRIMARY KEY, - FROM_MODEL VARCHAR(64) NOT NULL DEFAULT '', - TO_MODEL VARCHAR(64) NOT NULL DEFAULT '', - CONNECTIVITY SMALLINT NOT NULL DEFAULT -1 -); \ No newline at end of file diff --git a/base_model/dml.sql b/base_model/dml.sql index b3a2737..6073944 100644 --- a/base_model/dml.sql +++ b/base_model/dml.sql @@ -2,7 +2,7 @@ INSERT INTO BASIC.ATTRIBUTE_GROUP (GROUP_TYPE, GROUP_NAME, IS_PUBLIC, REMARK) VALUES ('base', '基础信息', 1,''), - ('base_extend', '基础信息扩展', 0,''), + ('base_extend', '扩展信息', 0,''), ('rated', '额定参数', 0,''), ('setup','设定参数',0,''), ('model','模型参数',0,''), diff --git a/model/ddl_0_gzs.sql b/model/ddl_0_gzs.sql new file mode 100644 index 0000000..3294790 --- /dev/null +++ b/model/ddl_0_gzs.sql @@ -0,0 +1,94 @@ +-- Active: 1731588378271@@vm.baseware.net@9432@metamodule@public + +-- drop public.station + +DROP TABLE IF EXISTS public.station; +DROP SEQUENCE IF EXISTS public.station_id_seq; + +-- drop public.zone + +DROP TABLE IF EXISTS public.zone; +DROP SEQUENCE IF EXISTS public.zone_id_seq; + +-- drop public.grid + +DROP TABLE IF EXISTS public.grid; +DROP SEQUENCE IF EXISTS public.grid_id_seq; + +-- public.grid + +CREATE SEQUENCE IF NOT EXISTS public.grid_id_seq; + +ALTER SEQUENCE public.grid_id_seq + OWNER TO postgres; + +CREATE TABLE IF NOT EXISTS public.grid +( + id integer NOT NULL DEFAULT nextval('grid_id_seq'::regclass), + name character varying(64) COLLATE pg_catalog."default" NOT NULL, + description character varying(512) COLLATE pg_catalog."default", + op integer NOT NULL DEFAULT '-1'::integer, + ts timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT grid_id_PrimaryKey PRIMARY KEY (id) +) +TABLESPACE pg_default; + +ALTER TABLE IF EXISTS public.grid + OWNER to postgres; + +-- public.zone + +CREATE SEQUENCE IF NOT EXISTS public.zone_id_seq; + +ALTER SEQUENCE public.zone_id_seq + OWNER TO postgres; + +CREATE TABLE IF NOT EXISTS public.zone +( + id integer NOT NULL DEFAULT nextval('zone_id_seq'::regclass), + grid_id integer, + name character varying(64) COLLATE pg_catalog."default" NOT NULL, + description character varying(512) COLLATE pg_catalog."default", + op integer NOT NULL DEFAULT '-1'::integer, + ts timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT zone_id_PrimaryKey PRIMARY KEY (id), + CONSTRAINT zone_ForeignKey_grid_id FOREIGN KEY ("grid_id") + REFERENCES public.grid (id) MATCH SIMPLE + ON UPDATE NO ACTION + ON DELETE NO ACTION + NOT VALID +) +TABLESPACE pg_default; + +ALTER TABLE IF EXISTS public.zone + OWNER to postgres; + + +-- public.station + +CREATE SEQUENCE IF NOT EXISTS public.station_id_seq; + +ALTER SEQUENCE public.station_id_seq + OWNER TO postgres; + +CREATE TABLE IF NOT EXISTS public.station +( + id integer NOT NULL DEFAULT nextval('station_id_seq'::regclass), + zone_id integer, + name character varying(64) COLLATE pg_catalog."default" NOT NULL, + description character varying(512) COLLATE pg_catalog."default", + is_local boolean DEFAULT false, + op integer NOT NULL DEFAULT '-1'::integer, + ts timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT station_id_PrimaryKey PRIMARY KEY (id), + CONSTRAINT station_ForeignKey_zone_id FOREIGN KEY (zone_id) + REFERENCES public.zone (id) MATCH SIMPLE + ON UPDATE NO ACTION + ON DELETE NO ACTION + NOT VALID +) +TABLESPACE pg_default; + +ALTER TABLE IF EXISTS public.station + OWNER to postgres; + diff --git a/model/ddl_1_page.sql b/model/ddl_1_page.sql new file mode 100644 index 0000000..25fcc19 --- /dev/null +++ b/model/ddl_1_page.sql @@ -0,0 +1,31 @@ + +-- drop public.page + +DROP TABLE IF EXISTS public.page; +DROP SEQUENCE IF EXISTS public.page_id_seq; + +-- public.page + +CREATE SEQUENCE IF NOT EXISTS public.page_id_seq; + +ALTER SEQUENCE public.page_id_seq + OWNER TO postgres; + +CREATE TABLE IF NOT EXISTS public.page +( + id integer NOT NULL DEFAULT nextval('page_id_seq'::regclass), + tag character varying(32) COLLATE pg_catalog."default" NOT NULL, + name character varying(64) COLLATE pg_catalog."default" NOT NULL, + status integer NOT NULL DEFAULT '-1'::integer, + label jsonb NOT NULL DEFAULT '{}'::jsonb, + context jsonb NOT NULL DEFAULT '{}'::jsonb, + description character varying(512) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying, + op integer NOT NULL DEFAULT '-1'::integer, + ts timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT page_id_PrimaryKey PRIMARY KEY (id) +) +TABLESPACE pg_default; + +ALTER TABLE IF EXISTS public.page + OWNER to postgres; + diff --git a/model/ddl_2_component.sql b/model/ddl_2_component.sql new file mode 100644 index 0000000..4de20e6 --- /dev/null +++ b/model/ddl_2_component.sql @@ -0,0 +1,47 @@ +-- Table: public.component + +-- DROP +DROP TABLE IF EXISTS public.component; +DROP SEQUENCE IF EXISTS public.component_id_seq; + +-- CREATE + +CREATE SEQUENCE IF NOT EXISTS public.component_id_seq; + +CREATE TABLE IF NOT EXISTS public.component +( + id integer NOT NULL DEFAULT nextval('component_id_seq'::regclass), + global_uuid uuid NOT NULL DEFAULT gen_random_uuid(), + nspath character varying(32) COLLATE pg_catalog."default", + tag character varying(32) COLLATE pg_catalog."default" NOT NULL, + name character varying(64) COLLATE pg_catalog."default" NOT NULL, + model_name character varying(64) COLLATE pg_catalog."default" NOT NULL, + description character varying(512) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::character varying, + grid character varying(64) COLLATE pg_catalog."default" NOT NULL, + zone character varying(64) COLLATE pg_catalog."default" NOT NULL, + station character varying(64) COLLATE pg_catalog."default" NOT NULL, + type integer NOT NULL, + in_service boolean DEFAULT false, + state integer NOT NULL DEFAULT 0, + connection jsonb NOT NULL DEFAULT '{}'::jsonb, + label jsonb NOT NULL DEFAULT '{}'::jsonb, + context jsonb NOT NULL DEFAULT '{}'::jsonb, + page_id integer NOT NULL, + op integer NOT NULL DEFAULT '-1'::integer, + ts timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT component_id_PrimaryKey PRIMARY KEY (id), + CONSTRAINT component_ForeignKey_page_id FOREIGN KEY (page_id) + REFERENCES public.page (id) MATCH SIMPLE + ON UPDATE NO ACTION + ON DELETE NO ACTION +) + +TABLESPACE pg_default; + +ALTER TABLE IF EXISTS public.component + OWNER to postgres; + +COMMENT ON TABLE public.component + IS '存储电网元件的基本信息'; + + diff --git a/model/ddl_3_topologic.sql b/model/ddl_3_topologic.sql new file mode 100644 index 0000000..cde012b --- /dev/null +++ b/model/ddl_3_topologic.sql @@ -0,0 +1,28 @@ +-- Table: public.topologic + +DROP TABLE IF EXISTS public.topologic; +DROP SEQUENCE IF EXISTS public.topologic_id_seq; + +CREATE SEQUENCE IF NOT EXISTS public.topologic_id_seq; + +CREATE TABLE IF NOT EXISTS public.topologic +( + id integer NOT NULL DEFAULT nextval('topologic_id_seq'::regclass), + page_id integer NOT NULL, + uuid_from uuid, + uuid_to uuid, + flag integer DEFAULT 0, + description character varying(512) COLLATE pg_catalog."default", + op integer NOT NULL DEFAULT '-1'::integer, + ts timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT topologic_id_PrimaryKey PRIMARY KEY (id), + CONSTRAINT topologic_ForeignKey_page_id FOREIGN KEY (page_id) + REFERENCES public.page (id) MATCH SIMPLE + ON UPDATE NO ACTION + ON DELETE NO ACTION +) + +TABLESPACE pg_default; + +ALTER TABLE IF EXISTS public.topologic + OWNER to postgres; \ No newline at end of file diff --git a/model/ddl_bay.sql b/model/ddl_bay.sql new file mode 100644 index 0000000..d318750 --- /dev/null +++ b/model/ddl_bay.sql @@ -0,0 +1,11 @@ +-- basic information of bay + +DROP TABLE IF EXISTS PUBLIC.BAY; + +CREATE TABLE PUBLIC.BAY ( + ID SERIAL PRIMARY KEY, + NAME VARCHAR(64) NOT NULL DEFAULT '', + TYPE VARCHAR(64) NOT NULL DEFAULT '', + FROM_NODE JSONB NOT NULL DEFAULT '{}', + TO_NODE JSONB NOT NULL DEFAULT '{}' +); \ No newline at end of file