Классика баз данных - статьи

       

и всех вызываемых им триггеров


Наконец, после выполнения исходного оператора и всех вызываемых им триггеров проверяется набор соответствующих утверждений целостности. Если какое-либо утверждение не соблюдается, этот оператор и все его триггеры (или текущая транзакция и все ее триггеры) отвергаются.

Утверждения переходов (в которых сравниваются значения OLD и NEW атрибутов кортежа) всегда применяются, как и триггеры, по принципу кортеж-за-кортежем. Утверждение перехода сравнивает значение кортежа до его изменения со значением после изменения и выполнения всех триггеров, вызванных при изменении этого кортежа.

Пользователь с привилегией CONTROL может удалить утверждение целостности или триггер с помощью команды DROP, например:

DROP TRIGGER T2

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

В System R утверждения целостности и триггеры могут определяться для хранимых отношений, но не для представлений. Такая политика позволяет избежать сложной проблемы поиска при изменении кортежа того множества представлений, которые затрагиваются этим изменением, и для которых должны вызываться свои утверждения или триггеры. Мы думаем, что пользователь, который имеет достаточный опыт для определения в системе утверждения целостности или триггера, должен достаточно хорошо понимать, как создавать утверждение или триггер в терминах хранимого отношения.

Последнее замечание по поводу использования триггеров. Создателю отношения может потребоваться, чтобы при каждой модификации отношения выполнялись сложные последовательности связанных с этим действий. Вместо использования триггера SEQUEL этот пользователь может пожелать написать программу на основном языке (как иллюстрируется в следующем разделе), которая модифицирует отношение в соответствии с некоторыми входными параметрами и также выполняет связанные с этим действия.После этого создатель может передать другим пользователям не обобщенные права UPDATE на данное отношение отношение, а только право выполнять эту программу.


Содержание  Назад  Вперед