Основные операции, приводящие к нарушению целостности БД:
1) удаление записи в родительском и/или дочернем отношении;
2) модификация записи в родительском отношении;
3) модификация записей в дочернем отношении.
Одновременно с понятием целостности БД вводится понятие реакции системы на попытки нарушения целостности БД.
Существует два типа реакций на попытку нарушения целостности (или две основные стратегии):
1. Restrict (ограничить – отказ выполнить незаконную операцию).
Данная стратегия сводится к запрету на выполнение действий, приводящих к нарушению целостности БД.
А также не позволяет:
● изменять значения полей первичного ключа в родительском отношении, если в дочернем отношении имеется, хотя бы одна запись, содержащая ссылку на изменяемую запись;
● удалять записи в родительском отношении, если в дочернем отношении имеется, хотя бы одна запись, содержащая ссылку на удаляемую запись. При попытке удаления записи возникает ошибка.
К примеру, если система знает, что в поле Возраст сотрудника должны быть целые числа в диапазоне от 18 до 65, то при этом генерируется какое-либо сообщение для пользователя.
2. Cascade (каскадировать – выполнение компенсирующего действия).
Данная стратегия обеспечивает автоматическое поддержание целостности БД, поэтому является самой сложной. При редактировании значений полей первичного ключа в родительском отношении автоматически вносится каскадное изменение соответствующих значений в дочернем отношении.
В родительском отношении при удалении записи автоматически производится каскадное удаление записей из дочернего отношения, связанных с удаляемой записью. Работу системы по проверке ограничений можно представить, как показано на рис. 7.1.
Рис. 7.1. Выполнение проверки ограничений
Дополнительные стратегии:
1. Ignore (игнорировать) – при выборе данной стратегии СУБД не обращает внимания на нарушение целостности данных и позволяет:
● изменять значения полей первичного ключа в родительском отношении, в независимости от существования связанных записей в дочернем отношении;
● удалять записи в родительском отношении в независимости от существования связанных записей в дочернем отношении.
2. Set null (установить в NULL) – разрешает выполнение всех требуемых операций, при этом некорректные значения внешних ключей заменяет на null-значения.
3. Set default (установить по умолчанию) – разрешает выполнение всех необходимых операций, при этом все некорректные значения внешних ключей заменяет на значения, выбранные по умолчанию.