Добавление ограничения «один из двух, не равный NULL» в postgresql - PullRequest
21 голосов
/ 27 марта 2011

Если у меня есть таблица в Postgresql:

create table Education ( 
    id                  integer references Profiles(id),
    finished            YearValue not null,
    started             YearValue,
    qualification       text,
    schoolName          text,
    studiedAt           integer references Organizations(id),
    primary key (id)
);

Мне нужно установить ограничение, чтобы schoolName или studiedAt не были равны нулю (один из них должен иметь информацию вэто).

Как мне это сделать?

Ответы [ 2 ]

33 голосов
/ 27 марта 2011

Вы можете использовать проверочное ограничение например,

constraint chk_education check (schoolName is not null or studiedAt is not null)

Из руководства:

Проверочное ограничение является наиболее общим типом ограничения. Это позволяет вам указать, что значение в определенном столбце должно удовлетворять логическому (истинному значению) выражению.

Редактировать: Альтернатива, чтобы соответствовать интерпретации Pithyless:

constraint chk_education check ((schoolName is not null and studiedAt is null) or (schoolName is null and studiedAt is not null))
0 голосов
/ 27 марта 2011

Вы также можете использовать триггер при обновлении и вставке, чтобы проверить соблюдение правила перед тем, как разрешить данные в таблицу. Обычно вы используете этот тип подхода, когда проверочное ограничение требует более сложной логики.

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