Триггер – это откомпилированная SQL-процедура, исполнение которой обусловлено наступлением определенных событий внутри базы данных.
Триггеры – особый инструмент SQL-сервера, используемый для поддержания целостности данных.
(С помощью ограничений целостности, правил и значений по умолчанию не всегда можно добиться нужного уровня функциональности).
Устно. Часто требуется реализовать сложные алгоритмы проверки данных, гарантирующие их достоверность и реальность. Кроме того, иногда необходимо отслеживать изменения значений таблицы, чтобы нужным образом изменить связанные данные. Триггеры можно рассматривать как своего рода фильтры, вступающие в действие после выполнения всех операций в соответствии с правилами, стандартными значениями и т.д.
Триггер представляет собой специальный тип процедур, запускаемых сервером автоматически при попытке изменения данных в таблицах, с которыми триггеры связаны. Каждый триггер привязывается к конкретной таблице. В случае обнаружения ошибки или нарушения целостности данных происходит отмена всех сделанных изменений.
|
|
С помощью триггеров достигаются следующие цели:
- проверка корректности введенных данных и выполнение сложных (дополнительных) ограничений целостности данных (которые трудно, если вообще возможно, поддерживать с помощью ограничений целостности, установленных для таблицы);
- выдача предупреждений (напоминающих о необходимости выполнения некоторых действий при обновлении таблицы, реализованном определенным образом);
- накопление аудиторской информации (посредством фиксации сведений о внесенных изменениях и тех лицах, которые их выполнили);
- поддержка репликации.
Недостатки использования триггеров:
- сложность: при перемещении некоторых функций в базу данных усложняются задачи ее проектирования, реализации и администрирования;
- скрытая функциональность: перенос части функций в базу данных и сохранение их в виде одного или нескольких триггеров может привести к скрытию от пользователя некоторых функциональных возможностей. (Хотя это в определенной степени упрощает его работу, но может стать причиной незапланированных, потенциально нежелательных побочных эффектов, поскольку в этом случае пользователь не в состоянии контролировать все процессы, происходящие в базе данных);
- влияние на производительность: перед выполнением каждой команды по изменению состояния базы данных СУБД должна проверить триггерное условие с целью выяснения необходимости запуска триггера для этой команды. (Выполнение подобных вычислений сказывается на общей производительности СУБД, а в моменты пиковой нагрузки ее снижение может стать особенно заметным. Очевидно, что при возрастании количества триггеров увеличиваются и накладные расходы, связанные с такими операциями.).