Есть следующая таблица:
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 ?
Ограничение-проверка может ссылаться на несколько столбцов, в таком случае оно не связано с определённым столбцом, а представлено отдельным элементом в списке. Определения столбцов и такие определения ограничений можно переставлять в произвольном порядке.
Такое ограничение является ограничением таблицы.
postgresql документация
mysql документация
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))
);
Хочу добавить, что подобные проверки будут более уместными на стороне бизнес-логики, а не на стороне хранилища данных.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей