Как объединить ограничения CHECK в SQL?

Есть следующая таблица:

    CREATE TABLE LectureHalls
    (
    id SERIAL PRIMARY KEY,
    floor INTEGER CHECK (floor <= 4),
    classroom INTEGER NOT NULL,
    CONSTRAINT sc_unique_lectureHall UNIQUE (id, floor, classroom),
    CONSTRAINT sc_unique_lectureHall2 UNIQUE (floor, classroom);
    );

Можно ли создать такое ограничение в sql чтобы при floor = 1 classroom > 0 and classroom <= 30 ?


Ответы (1 шт):

Автор решения: nörbörnën

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

Такое ограничение является ограничением таблицы.

документация

документация

CREATE TABLE LectureHalls (
    id SERIAL PRIMARY KEY,
    floor INTEGER CHECK (floor <= 4),
    classroom INTEGER NOT NULL,
    CHECK (floor is null or floor != 1 or (floor = 1 and classroom > 0 and classroom <= 30))
);

Хочу добавить, что подобные проверки будут более уместными на стороне бизнес-логики, а не на стороне хранилища данных.

→ Ссылка