BEGIN;

CREATE TABLE words (
    id BIGSERIAL PRIMARY KEY,
    language_id BIGINT NOT NULL REFERENCES languages (id),
    primary_form VARCHAR NOT NULL,
    CONSTRAINT primary_form_is_sane_text CHECK (is_sane_text(primary_form))
);

CREATE TABLE word_forms (
    id BIGSERIAL PRIMARY KEY,
    word_id BIGINT NOT NULL REFERENCES words (id),
    value VARCHAR NOT NULL,
    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;
