Подтвердить что ты не робот

Добавление одно-из двух не нулевых ограничений в postgresql

Если у меня есть таблица в 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 не должно быть null (один из них должен иметь в нем информацию).

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

4b9b3361

Ответ 1

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

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))

Ответ 2

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