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;
