BEGIN; CREATE TABLE translations ( -- name type constraints id BIGSERIAL PRIMARY KEY, word_id BIGINT NOT NULL REFERENCES words (id), index BIGINT NOT NULL, -- CONSTRAINT name CHECK (condition) CONSTRAINT index_is_not_negative CHECK (index >= 0) ); CREATE TABLE translation_texts ( -- name type constraints id BIGSERIAL PRIMARY KEY, translation_id BIGINT NOT NULL REFERENCES translations (id), lang_id BIGINT NOT NULL REFERENCES languages (id), value TEXT NOT NULL, commentary TEXT, -- CONSTRAINT name CHECK (condition) CONSTRAINT value_is_sane_text CHECK (is_sane_text(value)), CONSTRAINT commentary_is_sane_text CHECK (commentary IS NULL OR is_sane_text(commentary)) ); CREATE UNIQUE INDEX translations_word_index ON translations (word_id, index); CREATE UNIQUE INDEX translation_texts_translation_lang ON translation_texts (translation_id, lang_id); COMMIT;