В данной статье рассматривается механизм использования триггеров для поддержания целостности базы данных.
Ключевые слова: триггер, база данных, событие.
Триггер в MySQL — это особый вид хранимой процедуры, которая выполняется автоматически при вставке, удалении или модификации записи таблицы или представления (view).
Идея, лежащая в основе триггеров, очень проста. SQL дает возможность нам вставлять, удалять и модифицировать данные в таблицах базы данных при помощи соответствующих команд — INSERT, DELETE и UPDATE. Для того, чтобы выполнять какие-либо действия, связанные с изменением данных в базе данных, существуют триггеры. Фактически триггер представляет собой набор команд процедурного языка, который исполняется при выполнении операций INSERT/DELETE/UPDATE [1].
Триггеры используются для поддержания базы данных в адекватном и актуальном состоянии предметной области. Триггер запускается сервером автоматически при попытке изменения данных в таблице, с которой он связан. Все производимые им модификации данных рассматриваются как выполняемые в транзакции, в которой выполнено действие, вызвавшее срабатывание триггера [2]. Соответственно, в случае обнаружения ошибки или нарушения целостности данных может произойти откат этой транзакции.
К примеру, необходимо вести журнал вносимых в базу данных изменений. Вместо написания двух отдельных запросов (первый для внесения изменений в основную базу данных, второй для обновления данных журнала), достаточно использовать триггер, содержащий правило: “при обновлении данных в данной таблице вносить записи в журнал изменений”. Подобный подход хотя и создает некоторую избыточность в выполняемом запросе, однако это позволяет сократить объем передаваемых данных, что в целом способствует повышению производительности [3].
Триггеры могут «срабатывать» непосредственно до или сразу же после указанного события.
Триггеры могут использоваться для поддержания целостности данных. Например, если необходимо удалить основной источник данных, с которым связанны многочисленные данные из других таблиц, применение триггеров поможет решить эту проблему. С помощью триггеров можно запретить подобную операцию, либо организовать удаление сначала зависимых записей из других таблиц, а только потом удалить основную запись. Такой подход позволяет избавиться от аномалии удаления или аномалии обновления записей в базе данных и поддерживать базу данных в адекватном и актуальном состоянии.
Преимущество триггеров, в отличие от транзакции с несколькими запросами, — перенос целостность данных с уровня логики на уровень данных, где она и должна находиться [4]. Также применение триггеров дает некоторый прирост производительности, порядка 1.5 раз, который значительно увеличивается, в случае низкой скорости передачи данных между клиентом и сервером.
Применение триггеров дает возможность отслеживания соответствия вводимых данных доменам атрибутов изменяемых записей базы данных [5]. Например, для проверки адекватности вводимого возраста сотрудника (добавление новой записи, изменение существующей), достаточно создать триггер, который при изменении записей таблицы будет проверять поле возраст на соответствие домену: “ Возраст сотрудника не менее 18 и не более 65”
Триггеры могут быть запущены непосредственно перед отслеживаемой операцией (ключевое слово BEFORE), либо же сразу после ее завершения (AFTER).
С помощью триггеров достигаются следующие цели:
– Проверка корректности введенных данных и выполнение сложных ограничений целостности данных, которые трудно, если вообще возможно, поддерживать с помощью ограничений целостности, установленных для таблицы;
– Создание сообщений, уведомляющих о необходимости выполнения некоторых действий при обновлении таблицы, реализованном определенным образом;
– Сохранение статистической информации путем фиксации внесенных изменений лиц, которые их выполнили, и времени совершения операции;
– Поддержка репликации.
Преимущества использования триггеров:
– Минимизация сетевого трафика
– Сокращение используемых ресурсов
– Отсутствие необходимости передачи промежуточных результатов приложению
– Сохранение целостности данных
– Автоматический запуск триггеров
Особенности использования триггеров:
– Триггеры удаляются при удалении таблицы, к которой они привязаны
– Триггер запускается для каждой записи в таблице. Если запрос затрагивает, к примеру, 5 записей, то триггер будет запущен ровно 5 раз
– Для создания триггера, необходимо иметь привилегии SUPER
– Триггер может вызывать сохраненную процедуру
Литература:
- С. Д. Кузнецов. Основы баз данных. — М.: Бином. Лаборатория знаний, Интернет-университет информационных технологий, 2007. — 488 с.
- В.Дунаев. Базы данных. Язык SQL для студента. — СПб.: БХВ-Петербург, 2012. — 320 с.
- С. Д. Кузнецов. Базы данных. — М.: Академия, 2012. — 496 с.
- Э. В. Фуфаев, Д. Э. Фуфаев. Разработка и эксплуатация удаленных баз данных. — М.: Академия, 2012. — 256 с.
- О. Л. Голицына, Т. Л. Партыка, И. И. Попов. Основы проектирования баз данных. — М.: Форум, 2012. — 416 с.