Проверяемый текст
Пушников А.Ю. Введение в системы управления базами данных. Учебное пособие/Изд-е Башкирского ун-та. - Уфа, 1999.
[стр. 16]

Декларативная поддержка ограничений целостности заключается в определении ограничений средствами языка определения данных (DDL Data Definition Language) [25].
Обычно средства декларативной поддержки целостности (если они имеются в СУБД)
определяют ограничения на значения доменов и атрибутов, целостность сущностей (потенциальные ключи отношений) и ссылочную целостность (целостность внешних ключей).
Декларативные ограничения целостности можно использовать при создании и модификации таблиц средствами языка DDL или в виде отдельных утверждений (ASSERTION).
Например, следующий оператор создает таблицу PERSON и определяет для нее некоторые ограничения целостности: CREATE TABLE PERSON (Pers_Id INTEGER PRIMARY KEY, Pers_Name CHAR(30) NOT NULL,
Deptld REFERENCES DEPART(Dept Id) ON UPDATE CASCADE ON DELETE CASCADE); После выполнения оператора для таблицы PERSON будут объявлены следующие ограничения целостности:поле Pers_Id образует потенциальный ключ отношения;поле Pers_Name не может содержать null-значений;поле Dept_Id является внешней ссылкой на родительскую таблицу DEPART, причем, при изменении или удалении строки в родительской таблице каскадно должны быть внесены соответствующие изменения в дочернюю таблицу.
Процедурная поддержка ограничений целостности
заключается в использовании триггеров и хранимых процедур.
Не все ограничения целостности можно реализовать декларативно.
Примером такого ограничения может служить требование из примера 1, утверждающее, что поле
DeptKol таблицы DEPART должно содержать количество сотрудников, реально числящихся в подразделении.
Для
16
[стр. 133]

В противоположность этому, в примере 1 система допускает вставку записи о новом сотруднике (что приводит к нарушению целостности базы данных), но автоматически производит компенсирующие действия, изменяя значение поля Dept_Kol в таблице DEPART.
Работу системы по проверке ограничений можно изобразить на следующем рисунке: Рисунок 1 В некоторых случаях система может не выполнять проверку на нарушение ограничений, а сразу выполнять компенсирующие операции.
Действительно, в примере 1 при вставке или удалении сотрудника проверку производить не нужно, т.к.
результаты ее известны заранее ограничение обязательно будет нарушено.
В этом случае необходимо сразу приступать к компенсированию возникшего нарушения.
Классификация ограничений целостности Ограничения целостности можно классифицировать несколькими способами:  По способам реализации.
 По времени проверки.
 По области действия.
Классификация ограничений целостности по способам реализации Каждая система обладает своими средствами поддержки ограничений целостности.
Различают два способа реализации:  Декларативная поддержка ограничений целостности.
Процедурная поддержка ограничений целостности.
Определение 4.
Декларативная поддержка ограничений целостности заключается в определении ограничений средствами языка определения данных (DDL Data Definition Language).
Обычно средства декларативной поддержки целостности (если они имеются в СУБД)


[стр.,134]

определяют ограничения на значения доменов и атрибутов, целостность сущностей (потенциальные ключи отношений) и ссылочную целостность (целостность внешних ключей).
Декларативные ограничения целостности можно использовать при создании и модификации таблиц средствами языка DDL или в виде отдельных утверждений (ASSERTION).
Например, следующий оператор создает таблицу PERSON и определяет для нее некоторые ограничения целостности: CREATE TABLE PERSON (Pers_Id INTEGER PRIMARY KEY, Pers_Name CHAR(30) NOT NULL,
Dept_Id REFERENCES DEPART(Dept_Id) ON UPDATE CASCADE ON DELETE CASCADE); После выполнения оператора для таблицы PERSON будут объявлены следующие ограничения целостности:Поле Pers_Id образует потенциальный ключ отношения.
Поле Pers_Name не может содержать null-значений.
Поле Dept_Id является внешней ссылкой на родительскую таблицу DEPART, причем, при изменении или удалении строки в родительской таблице каскадно должны быть внесены соответствующие изменения в дочернюю таблицу.
Средства декларативной поддержки ограничений описаны в стандарте SQL и более подробно рассматриваются ниже.
Определение 5.
Процедурная поддержка ограничений целостности заключается в использовании триггеров и хранимых процедур.
Не все ограничения целостности можно реализовать декларативно.
Примером такого ограничения может служить требование из примера 1, утверждающее, что поле
Dept_Kol таблицы DEPART должно содержать количество сотрудников, реально числящихся в подразделении.
Для
реализации этого ограничения необходимо создать триггер, запускающийся при вставке, модификации и удалении записей в таблице PERSON, который корректно изменяет значение поля Dept_Kol.
Например, при вставке в таблицу PERSON новой строки, триггер увеличивает на единицу значение поля Dept_Kol, а при удалении строки уменьшает.
Заметим, что при модификации записей в таблице PERSON могут потребоваться даже более сложные действия.
Действительно, модификация записи в таблице PERSON может заключаться в том, что мы переводим сотрудника из одного отдела в другой, меняя значение в поле Dept_Id.
При этом необходимо в старом подразделении уменьшить количество сотрудников, а в новом увеличить.
Кроме того, необходимо защититься от неправильной модификации строк таблицы DEPART.
Действительно, пользователь может попытаться модифицировать запись об отделе, введя неверное значение поля Dept_Kol.
Для предотвращения подобных действий необходимо создать также триггеры, запускающиеся при вставке и модификации записей в таблице DEPART.
Триггер, запускающийся при удалении записей из таблицы DEPART не нужен, т.к.
уже имеется ограничение ссылочной целостности, каскадно удаляющее записи из таблицы PERSON при удалении записи из таблицы DEPART.
По сути, наличие ограничения целостности (как декларативного, так и процедурного характера) всегда приводит к созданию или использованию некоторого программного кода, реализующего это ограничение.
Разница заключается в том, где такой код хранится и как он создается.

[Back]