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

255
23 апреля 2022, 20:30

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

    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 ?

Answer 1

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

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

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

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

READ ALSO
Какие существуют походы для интеграции Docker-контейнера и инкрементальной сборки FullStack-проекта с серверной частью на NodeJS?

Какие существуют походы для интеграции Docker-контейнера и инкрементальной сборки FullStack-проекта с серверной частью на NodeJS?

Если проект написан целиком на JavaScript (серверная часть - на NodeJS), HTML и CSS, то нужда в разделении на исходные и выходные файлы отсутствуетМогу...

230
Ошибка при работе с файлом базы данных: sqlite3.DatabaseError: file is not a database

Ошибка при работе с файлом базы данных: sqlite3.DatabaseError: file is not a database

Задача, которую не выходит решить: написать на Python простейший код, который будет показывать таблицу из БД

180
PHP: замена ссылок в тексте из базы данных

PHP: замена ссылок в тексте из базы данных

В базе данных есть текстовый столбец, в котором хранятся ссылки и текст:

165
LARAVEL: как использовать функцию replace в DB

LARAVEL: как использовать функцию replace в DB

Как использовать функцию REPLACE() в Laravel 57?

234