Что такое триггеры?
Триггером называется именованный набор прекомпилированных команд SQL, хранящийся на сервере, который автоматически выполняется, когда происходит заданное событие. Например, триггер может выполняться при вставке, изменении или удалении строки в существующей таблице. Триггер сообщает СУБД, как нужно выполнять команды SQL INSERT, UPDATE или DELETE, чтобы выполнялись нормальные правила (business rules) организации.
Триггер ссылочной целостности - особый вид триггера, используемый для поддержания целостности между двумя таблицами, которые связаны между собой. Если строка в одной таблице вставляется, изменяется или удаляется, то триггер ссылочной целостности (который мы далее будем называть RI-триггером) сообщает СУБД, что нужно делать с теми строками в других таблицах, у которых значение внешнего ключа совпадает со значением первичного ключа вставленной (измененной, удаленной) строки.
Предположим, например, что в фирме проката видеопродукции существует правило, согласно которому фильм нельзя удалять из списка, если какие-то копии этого фильма в данный момент находятся на руках. Что произойдет, если Вы попытаетесь удалить название фильма, в то время как копия этого фильма находится на руках? Если Ваша СУБД поддерживает RI-триггеры, то команда DELETE языка SQL может быть обработана одним из следующих способов:
· Запрещается удаление фильма из таблицы MOVIE. Правило ссылочной целостности, запрещающее вставку, изменение или удаление строки, называется RESTRICT.
· Фильм удаляется из таблицы MOVIE и все строки в таблицах MOVIE-COPY и MOVIE-RENTAL-RECORD с тем же номером фильма, что и у удаленной строки, также автоматически удаляются. Правило ссылочной целостности, передающее изменение от одной таблицы к другой, называется CASCADE. Обратите внимание, что если Вы примените это правило ссылочной целостности к данной ситуации с фильмом, у Вас не будет возможности проследить за той копией удаленного фильма, которая находится на руках. Для таких ситуаций Вы можете переопределить триггер ссылочной целостности, устанавливаемый по умолчанию, так что информация о копии фильма и о том, у кого она находится, не стиралась бы случайно.
· Фильм удаляется из таблицы MOVIE, но номеру фильма для той копии, которая находится на руках, в таблице MOVIE-RENTAL-RECORD автоматически присваивается нулевое значение (пустое поле), что говорит о том, что Вы больше не планируете работать с этим фильмом. После того как последняя копия фильма будет возвращена, ее можно выставить для окончательной продажи, а не возвращать на нормальный склад для последующейсдачи в прокат. Правило ссылочной целостности, изменяющее текущее значение данных на нулевое, называется SET NULL.
· Хотя Вы и не можете использовать триггеры для усиления ссылочной целостности, если у Вас установлена РС-ориентированная СУБД, ERwin все-таки предоставляет альтернативный способ усиления ссылочной целостности в случае СУБД Fox Pro. См. руководство по ERwin для РС-ориентированных СУБД, ERwin Desktop Database Guide, разд. 'Усиление ссылочной целостности для таблиц Fox Pro'.
ERwin располагает шестью RI-триггерами, устанавливаемыми по умолчанию, которые Вы можете связывать с сущностями, чтобы указывать Вашей СУБД, как ей усиливать ссылочную целостность. В особых ситуациях Вы можете переопределить код, генерируемый ERwin по умолчанию, изменяя эти шаблоны триггеров в соотсветствии с Вашей ситуацией.