Добавление одно-из двух не нулевых ограничений в 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 (один из них должен иметь в нем информацию).
Как это сделать?
Ответы
Ответ 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
Вы также можете использовать триггер для обновления и вставить, чтобы проверить соблюдение правила перед тем, как разрешить данные в таблице. Обычно вы используете этот тип подхода, когда ограничение проверки требует более сложной логики.