запускается при любой попытке удаления/обновления значения
родительского ключа.
Мы говорили о двух видах триггеров ссылочной целостности –
ОТЛОЖИТЬ и КАСКАДИРОВАТЬ. Они наиболее часто
используются на практике, поэтому РСУБД обычно имеют системные
триггеры отложенного и каскадного удаления/обновления. Но
возможные варианты действий не ограничиваются этими правилами.
Вообще говоря, правила внешнего ключа могут быть какими
угодно. Например, система может:
предложить пользователю самостоятельно решить вопрос о
том, что делать со ссылающимися кортежами;
заменить значения внешнего ключа, ссылающиеся на
удаляемое значение родительского, значениями по умолчанию;
удалить ссылающиеся кортежи из отношения-потомка и
занести их в некое архивное отношение и т.п.
Как правило, в БД, даже относительно простых, большинство
отношений являются и ссылочными и ссылающимися. Правила
внешних ключей устанавливаются для каждого из них индивидуально.
При этом могут возникать сложные ситуации.
Например, пусть R
1
, R
2
, R
3
– связанные отношения: R
3
R
2
R
1
. Для R
2
определено каскадное удаление. Сделана попытка удаления
кортежа R
1
, на который есть ссылки в R
2
. Следует удалить все кортежи
R
2
, ссылающиеся на удаляемый кортеж R
1
. Однако на эти кортежи есть
ссылки в R
3
. Если для R
3
также установлено правило каскадного удаления,
то операция будет выполнена «лавиной». Если же для R
3
определено
отложенное удаление, то операция удаления из R
2
не может быть
выполнена, и, следовательно, не может быть выполнена операция удаления
из R
1
.
Операции удаления/обновления всегда атомарны. Либо
выполняются все определенные правилами изменения в группе
отношений, затронутых операцией, либо не выполняется ни одно,
и состояние БД остается неизменным.
2.3.7 Резюме. БД называется целостной в некоторый момент
времени, если ее текущее состояние можно интерпретировать как