BEGIN; CREATE TABLE words ( -- name type constraints id BIGSERIAL PRIMARY KEY, language_id BIGINT NOT NULL REFERENCES languages (id), primary_form VARCHAR NOT NULL, -- CONSTRAINT name CHECK (condition) CONSTRAINT primary_form_is_sane_text CHECK (is_sane_text(primary_form)) ); CREATE TABLE word_forms ( -- name type constraints id BIGSERIAL PRIMARY KEY, word_id BIGINT NOT NULL REFERENCES words (id), value VARCHAR NOT NULL, -- CONSTRAINT name CHECK (condition) CONSTRAINT value_is_sane_text CHECK (is_sane_text(value)) ); CREATE TABLE word_form_example_texts ( id BIGSERIAL PRIMARY KEY, word_form_id BIGINT NOT NULL REFERENCES word_forms (id), example_text_id BIGINT NOT NULL REFERENCES example_texts (id) ); CREATE UNIQUE INDEX word_forms_word_value_index ON word_forms (word_id, value); COMMIT;