Скачиваний:
124
Добавлен:
02.05.2014
Размер:
2.3 Mб
Скачать

3. Пусть r1 и r2 — ссылающаяся и ссылочная переменные-отношения соответственно.

R2 ) R1

И пусть для этого ссылочного ограничения установлено правило удаления CASCADE. Тогда удаление некоторого кортежа из переменной-отношения R1 в общем случае повлечет за собой удаление определенных кортежей переменной-отношения R2. Теперь предположим, что на переменную-отношение R2, в свою очередь, ссылается некоторая переменная-отношение R3.

R3 > R2 > R1

Тогда результат неявного удаления кортежей из переменной-отношения R2 по сути ничем не будет отличаться от попытки непосредственного удаления этих кортежей явно заданной операцией удаления. Иначе говоря, выполнение неявного удаления требует соблюдения правила удаления, установленного как ограничение ссылочной целостности между переменными-отношениями R3 и R2. Если в результате требуе­мое удаление выполнено не будет (согласно установленному правилу удаления для ссылочной зависимости между переменными-отношениями R3 и R2 или же по ка­кой-либо другой причине), то должно быть отменено и выполнение всей операции в целом, а база данных сохранена в неизменном состоянии. И так далее рекурсивно для любого количества уровней.

Аналогичные замечания можно сделать в отношении правил каскадного обновле­ния, потребовав распространения необходимых изменений, если внешний ключ в переменной-отношении R2 имеет какие-либо общие атрибуты с потенциальным ключом той переменной-отношения, на которую ссылается внешний ключ в пере­менной-отношении R3.

4. Из сказанного выше следует, что с логической точки зрения операции обновления базы данных всегда атомарны (все или ничего), даже в том случае, когда из-за ус- тановленного правила каскадного распространения изменений они неявно выпол- няют несколько обновлений в нескольких переменных-отношениях.

Триггерные процедуры

В предыдущем подразделе в качестве одного из возможных решений проблемы под­держки ссылочной целостности предлагалось применять пользовательские процедуры. У читателя, по-видимому, нет никаких сомнений в том, что в общем концепция ссылочных действий относится, скорее всего, не к ограничениям целостности как таковым, а к об­ласти триггерных процедур. Триггерные процедуры, которые в литературе часто назы­вают просто триггерами, автоматически вызываются, как только происходит некоторое событие (или условие запуска). Обычно условием запуска является выполнение некото­рой операции обновления базы данных, но это может быть и определенная исключи­

тельная ситуация (в частности, нарушение некоторого установленного ограничения це­лостности) или истечение заданного времени. Простейшим примером триггерной проце­дуры могут служить ссылочные действия, выполняемые при указании спецификатора CASCADE (заметьте, при декларативном указании!).

В общем случае триггерные процедуры могут применяться и для решения более ши­рокого круга проблем, а не только для рассматриваемых в этом разделе вопросов обес­печения ссылочной целостности. (С перечнем таких применений можно ознакомиться в [8.1].) Однако это большая самостоятельная тема, которая выходит далеко за рамки дан­ной книги. (Заинтересованный читатель может обратиться к [8.22], где эти вопросы изла­гаются подробно.) Хотелось бы отметить, что, несмотря на то что использование триг-герных процедур может быть чрезвычайно полезным для достижения самых различных целей, его не следует считать хорошим подходом для обеспечения целостности базы данных по очевидным причинам: декларативный подход, если он только возможен, все­гда предпочтительнее.

Замечание. Последнее высказывание не означает, что использование ссылочных опе­раций — это плохая идея. По крайней мере (как уже отмечалось выше), когда для реали­зации ссылочных действий потребуется использовать некоторые процедуры, это должно указываться декларативно.

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]