Что такое триггер в базе данных и каковы его сценарии использования?

Ответ

Триггер — это хранимая процедура в базе данных, которая автоматически выполняется в ответ на определённые события, связанные с таблицей. Этими событиями обычно являются операции модификации данных: INSERT, UPDATE или DELETE.

Триггеры могут срабатывать до (BEFORE) или после (AFTER) выполнения события.

Основные сценарии использования:

  1. Аудит и логирование: Автоматическая запись информации о том, кто, когда и какие данные изменил, в отдельную таблицу логов. Пример: при каждом обновлении зарплаты сотрудника сохранять старое значение, новое значение и имя пользователя, выполнившего операцию.

  2. Поддержание целостности данных и сложная валидация: Реализация бизнес-правил, которые невозможно описать стандартными ограничениями (CHECK, FOREIGN KEY). Пример: запретить удаление проекта, если у него еще есть активные задачи.

  3. Автоматическое вычисление производных данных: Обновление вычисляемых полей в других таблицах. Пример: при добавлении нового товара в заказ автоматически пересчитывать и обновлять поле total_sum в таблице заказов.

Пример (псевдокод SQL):

CREATE TRIGGER update_order_sum
AFTER INSERT ON order_items
FOR EACH ROW
BEGIN
    UPDATE orders
    SET total_sum = total_sum + NEW.price
    WHERE id = NEW.order_id;
END;

Важные риски:

  • Скрытая логика: Триггеры делают логику работы с данными неявной. Разработчик может не догадываться об их существовании, что усложняет отладку.
  • Производительность: Неправильно написанный триггер может серьезно замедлить операции записи в базу данных.
  • Сложность: Каскадные триггеры (когда один триггер вызывает другой) могут привести к непредсказуемому поведению и сложным для отладки цепочкам вызовов.