Ограничение Postgres и внешний ключ - PullRequest
0 голосов
/ 17 сентября 2018

Возможно ли применить ограничение и внешний ключ только тогда, когда все значения не равны NULL? Например, в полиморфном отношении один объект будет иметь несколько внешних ключей, но часто используется только один, поэтому имеет место нарушение. Как я могу избежать этого?

CREATE TABLE IF NOT EXISTS acos (
    id SERIAL PRIMARY KEY,
    created_at timestamp,
    updated_at timestamp,
    owner_id varchar(64) NOT NULL,
    stack_id varchar(64) DEFAULT NULL,
    qac_id varchar(64) DEFAULT NULL,
    rights varchar(1024)[], 
)

Устанавливается либо stack_id, либо qac_id, но не оба одновременно.

То же самое касается следующего ограничения:

CONSTRAINT name_owner_id UNIQUE 
            (
                name, owner_id
            )

Я бы хотел игнорировать ограничение, когда либо name, либо owner_id имеет значение null.

1 Ответ

0 голосов
/ 17 сентября 2018

Если я не понимаю вас правильно, PostgreSQL уже работает так, как вы хотите по умолчанию:

  • Вы можете иметь одинаковые записи дважды в ограничении UNIQUE, пока один из нихNULL.

  • Если столбец внешнего ключа равен NULL, ограничение не применяется, пока вы придерживаетесь значения по умолчанию MATCH SIMPLE.

  • Для условия типа «одно из двух значений должно быть NOT NULL», вы можете использовать проверочное ограничение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...