CREATE TABLE vocable_schema.field_metainfo_table (
       field_metainfo_id BIGSERIAL NOT NULL
     , field_metainfo_name TEXT NOT NULL
     , field_metainfo_value TEXT NOT NULL
     , registered_date TIMESTAMP WITH TIME ZONE NOT NULL
     , PRIMARY KEY (field_metainfo_id)
);

CREATE TABLE vocable_schema.source_category_table (
       source_category_id BIGSERIAL NOT NULL
     , source_category_name TEXT NOT NULL
     , source_category_value TEXT NOT NULL
     , registered_date TIMESTAMP WITH TIME ZONE NOT NULL
     , PRIMARY KEY (source_category_id)
);

CREATE TABLE vocable_schema.source_table (
       source_id BIGSERIAL NOT NULL
     , source_distributor TEXT
     , source_title TEXT NOT NULL
     , source_version TEXT
     , registered_date TIMESTAMP WITH TIME ZONE NOT NULL
     , source_priority_value INT NOT NULL
     , PRIMARY KEY (source_id)
);

CREATE TABLE vocable_schema.record_table (
       record_id BIGSERIAL NOT NULL
     , record_serno BIGINT
     , source_id BIGINT NOT NULL
     , registered_date TIMESTAMP WITH TIME ZONE NOT NULL
     , PRIMARY KEY (record_id)
     , CONSTRAINT FK_record_table_1 FOREIGN KEY (source_id)
                  REFERENCES vocable_schema.source_table (source_id)
);

CREATE TABLE vocable_schema.field_table (
       field_id BIGSERIAL NOT NULL
     , field_serno INT NOT NULL
     , field_heading TEXT
     , is_neoterized BOOL NOT NULL
     , invisible BOOL NOT NULL
     , source_id BIGINT NOT NULL
     , registered_date TIMESTAMP WITH TIME ZONE NOT NULL
     , PRIMARY KEY (field_id)
     , CONSTRAINT FK_field_table_1 FOREIGN KEY (source_id)
                  REFERENCES vocable_schema.source_table (source_id)
);

CREATE TABLE vocable_schema.field_rel_table (
       field_rel_id BIGSERIAL NOT NULL
     , field_1_id BIGINT NOT NULL
     , field_2_id BIGINT NOT NULL
     , field_rel_type TEXT NOT NULL
     , registered_date TIMESTAMP WITH TIME ZONE NOT NULL
     , PRIMARY KEY (field_rel_id)
     , CONSTRAINT FK_field_rel_table_1 FOREIGN KEY (field_1_id)
                  REFERENCES vocable_schema.field_table (field_id)
     , CONSTRAINT FK_field_rel_table_2 FOREIGN KEY (field_2_id)
                  REFERENCES vocable_schema.field_table (field_id)
);

CREATE TABLE vocable_schema.source_metainfo_table (
       source_metainfo_id BIGSERIAL NOT NULL
     , source_metainfo_serno INT NOT NULL
     , source_metainfo_heading TEXT NOT NULL
     , source_metainfo_value TEXT
     , source_segment_heading TEXT
     , source_segment_inverted BOOL NOT NULL
     , source_id BIGINT NOT NULL
     , registered_date TIMESTAMP WITH TIME ZONE NOT NULL
     , PRIMARY KEY (source_metainfo_id)
     , CONSTRAINT FK_source_metainfo_table_1 FOREIGN KEY (source_id)
                  REFERENCES vocable_schema.source_table (source_id)
);

CREATE TABLE vocable_schema.source_workingnote_table (
       source_workingnote_id BIGSERIAL NOT NULL
     , source_workingnote_name TEXT NOT NULL
     , source_workingnote_value TEXT NOT NULL
     , source_id BIGINT NOT NULL
     , registered_date TIMESTAMP WITH TIME ZONE NOT NULL
     , PRIMARY KEY (source_workingnote_id)
     , CONSTRAINT FK_source_workingnote_table_1 FOREIGN KEY (source_id)
                  REFERENCES vocable_schema.source_table (source_id)
);

CREATE TABLE vocable_schema.record_name_table (
       record_name_id BIGSERIAL NOT NULL
     , record_id BIGINT NOT NULL
     , record_name TEXT NOT NULL
     , registered_date TIMESTAMP WITH TIME ZONE NOT NULL
     , PRIMARY KEY (record_name_id)
     , CONSTRAINT FK_record_name_table_1 FOREIGN KEY (record_id)
                  REFERENCES vocable_schema.record_table (record_id)
);

CREATE TABLE vocable_schema.field_vs_field_metainfo_table (
       field_vs_field_metainfo_id BIGSERIAL NOT NULL
     , field_id BIGINT NOT NULL
     , field_metainfo_id BIGINT NOT NULL
     , registered_date TIMESTAMP WITH TIME ZONE NOT NULL
     , PRIMARY KEY (field_vs_field_metainfo_id)
     , CONSTRAINT FK_field_vs_field_metainfo_table_1 FOREIGN KEY (field_metainfo_id)
                  REFERENCES vocable_schema.field_metainfo_table (field_metainfo_id)
     , CONSTRAINT FK_field_vs_field_metainfo_table_2 FOREIGN KEY (field_id)
                  REFERENCES vocable_schema.field_table (field_id)
);

CREATE TABLE vocable_schema.source_vs_source_category_table (
       source_vs_source_category_id BIGSERIAL NOT NULL
     , source_id BIGINT NOT NULL
     , source_category_id BIGINT NOT NULL
     , registered_date TIMESTAMP WITH TIME ZONE NOT NULL
     , PRIMARY KEY (source_vs_source_category_id)
     , CONSTRAINT FK_source_vs_source_category_table_1 FOREIGN KEY (source_id)
                  REFERENCES vocable_schema.source_table (source_id)
     , CONSTRAINT FK_source_vs_source_category_table_2 FOREIGN KEY (source_category_id)
                  REFERENCES vocable_schema.source_category_table (source_category_id)
);

CREATE TABLE vocable_schema.vocable_table (
       vocable_id BIGSERIAL NOT NULL
     , vocable_value TEXT NOT NULL
     , record_id BIGINT NOT NULL
     , field_id BIGINT NOT NULL
     , registered_date TIMESTAMP WITH TIME ZONE NOT NULL
     , PRIMARY KEY (vocable_id)
     , CONSTRAINT FK_vocable_table_1 FOREIGN KEY (record_id)
                  REFERENCES vocable_schema.record_table (record_id)
     , CONSTRAINT FK_vocable_table_2 FOREIGN KEY (field_id)
                  REFERENCES vocable_schema.field_table (field_id)
);


