Ограничение целостности данных

Для БД важно гарантировать подчиненность данных, добавляемых в таблицы БД, некоторым организационным правилам, которые определяются администратором БД или разработчиком клиентского приложения. Если клиентское приложение пытается добавить или изменить запись, нарушающую установленные правила (правила целостности), то СУБД должна отвергнуть операцию и возвратить приложению соответствующий код завершения.

Для решения проблем, связанных с соблюдением правил целостности данных, СУБД ЛИНТЕР предлагает такие средства, как ограничения целостности и триггеры БД.

Ограничение целостности – это декларативный способ задания организационного правила для столбца таблицы. Речь идёт о логической целостности, например, значения столбца «Дата увольнения» не могут быть меньше значений столбца «Дата приема на работу». Ограничение целостности представляет собой утверждение о данных таблицы, которое должно быть всегда истинным:

  • если для существующей в БД таблицы вводится ограничение целостности, а в таблице уже существуют данные, не удовлетворяющие этому ограничению, то такое ограничение нельзя ввести в действие;

  • после того как ограничение целостности определено, все SQL-запросы, нарушающие это ограничение, игнорируются с выдачей соответствующего кода завершения.

Ограничения целостности определяются вместе с таблицей (или добавляются при модификации её схемы) и сохраняются как часть определения схемы таблицы централизованно в словаре данных. Если правило ограничения целостности изменяется, его требуется изменить лишь один раз – на уровне БД, а не индивидуально для каждого клиентского приложения.

СУБД ЛИНТЕР поддерживает следующие ограничения целостности:

  • NOT NULL – запрещает внести в столбец таблицы неизвестные или неопределённые значения (обычно NULL-значения используются для обозначения именно неизвестных или неопределённых значений);

  • UNIQUE (ограничение уникальности значений) – запрещает дублирование значений в столбце. СУБД должна автоматически отслеживать уникальность значений столбца или составного значения группы столбцов (составное значение – это конкатенации значений заданной группы столбцов). При нарушении уникальности приложение получит соответствующий код завершения, а все изменения в БД, сделанные данным SQL-запросом, будут отменены. UNIQUE-ограничение допускает NULL-значения;

  • PRIMARY KEY (первичный ключ) – запрещает дубликаты и NULL-значения в столбце или составном значении группы столбцов;

  • FOREIGN KEY (внешний ключ) – требует, чтобы каждое значение в столбце или составном значении группы столбцов в данной таблице совпадало со значением из столбца типа UNIQUE или PRIMARY KEY в указанной таблице. (Ограничения целостности FOREIGN KEY также определяют действия «ссылочной целостности», которые определяют действия СУБД ЛИНТЕР с зависимыми данными при изменении тех данных, на которые они ссылаются);

  • CHECK (декларативная целостность) – запрещает значения, которые не удовлетворяют логическому выражению ограничения. Это ограничение обычно накладывается на значения столбцов. Например, если корпоративными правилами не разрешено платить сотруднику менее 1000 руб. и более 10000 руб., именно такое ограничение на значения столбца можно ввести, чтобы исключить проверку допустимого диапазона вводимых значений непосредственно в коде клиентского приложения и возложить эту функцию на СУБД.

Другие, более сложные виды логической целостности, можно возложить на хранимые процедуры и триггеры.