Понятие о триггерах
Преимущество триггерной процедуры состоит в том, что SQL Server автоматически вызывает ее при обращении к команде, для которой она определена. Это повышает устойчивость базы данных к внешним воздействиям (робастность). Вам нет нужды беспокоиться о том, чтобы клиенты базы данных – пользователи или приложения – разбирались и пользовались всеми зависимостями данных и установленными для них правилами.
Предположим, в торговой организации существует правило, в соответствии с которым заказ на общую сумму 10000$ или выше требует проверки кредитоспособности. Если Credit Approved является столбцом таблицы Customer, а заказ добавляется в таблицу Order, вы не сможете использовать проверочное ограничение типа CHECK для реализации правила, не следует возлагать ответственность за его соблюдение на клиентов базы данных. Триггер предоставляет механизм, обеспечивающий исполнение правила внутри базы данных.
Триггеры также могут изолировать клиентов от изменений в правилах для базы данных. В продолжение предыдущего примера, если бизнес-правило будет изменено таким образом, что проверка кредитоспособности требуется только при покупках на сумму 15000$ и более, новое правило может быть применено на уровне базы данных, без необходимости проверки и модификации клиентских приложений.
Триггеры используются для бизнес-правил, которые могут быть реализованы с помощью табличных ограничений. До появления версии SQL Server 2000 триггеры в основном применялись для отслеживания каскадных изменений связанных данных, однако, как мы уже видели, это правило теперь может быть реализовано на табличном уровне. Однако большинство правил, относящееся к взаимодействию нескольких таблиц, такие как вычисление итоговых значений или ограничение значений на основе другой таблицы, как в нашем примере, гораздо проще реализовать через триггеры.
Совет. Хотя производительность триггеров обычно не представляет проблемы (в отличие от курсоров), следует всегда применять правила по возможности на самом низком уровне. Не используйте триггеры, если можно применить проверочное ограничение CHECK, а ограничение CHECK не следует использовать, если можно обойтись ограничением UNIQUE.