Создание и управление индексами. Создание и управление встроенными процедурами. Оптимизация производительности запросов. Управление транзакциями и блокировками, страница 21

*  Если триггер откатывает транзакцию определённую пользователем, то она откатывается полностью. Если триггер сработал на выполнение batch, то batch команды также отменяются. Последующие операторы batch не выполняются.

*  Вы должны минимизировать использование ROLLBACK TRANSACTION в коде триггера. Откат транзакции создаёт дополнительную работу, потому что все работы, которые не были закончены на данный момент в транзакции, будут незавершёнными. Это будет негативно сказываться на производительности. Запускайте транзакцию после того, как всё проверено.

*  Пользователь, который запрашивает триггер, должен также иметь права на выполнение всех операторов в таблице.

Использование триггеров

Триггеры – лучшее средство для обеспечения низкоуровневой целостности данных, не для возврата результата запроса. Основное преимущество триггеров это то, что они могут содержать комплексно выполняемую логику. Триггеры могут делать каскадные изменения зависимых таблиц в базе данных, обеспечивать более комплексную целостность данных чем ограничение CHECK, объявлять индивидуальные сообщения об ошибках, содержать не нормализованные данные, и сравнивать состояние данных до и после изменения.

Вы можете использовать триггеры для каскадного изменения или удаления в зависимых таблицах базы данных. Для примера, триггер на удаление таблицы Products может удалять соответствующие строке в других таблицах, которые имеют строки связанные с удаляемым идентификатором продукта. Триггер делает это с использованием вторичного ключа ProductID как способ поиска расположения строк в таблице Order Details.

В отличии от ограничения CHECK, триггеры могут ссылаться на колонки в другой таблице. Для примера, вы можете поместить триггер на вставку для таблицы Order Details, который проверяет колонку UnitsInStock для поиска элемента в таблице Products. Триггер определить, когда значение UnitsInStock меньше чем 10, что является максимальным значением заказа.

Вы можете использовать триггеры для обеспечения комплексной целостности ссылок с помощью:

*  Выполнения действий или каскадного обновления или удаления. Целостность ссылок может отличаться при использовании ограничений FOREIGN KEY и REFERENCE в операторе CREATE TABLE.Триггер выгоден для гарантирования необходимых действий, когда должны быть произведены каскадные удаления или обновления. Если ограничение существует для таблицы с триггером, оно проверяется до выполнения триггера. Если ограничение нарушено, то триггер не работает.

*  Создание многострочных триггеров. Когда более одной строки вставлено, обновлено или удалено, вы должны писать триггеры, ссылающиеся на множество строк.

*  Обеспечение ссылочной целостности между базами данных.

Триггеры могут использоваться для обеспечения низкоуровневой целостности данных, в не нормализованном окружении базы данных. Содержание не нормализованных данных отличается от каскадирования в обычных каскадных ссылках для отношений между первичным и вторичным ключом.

Большинство триггеров предоставляют возможность ссылаться на изменения, которые производятся с помощью операторов INSERT, UPDATE или DELETE. Это позволяет вам ссылаться на строки, которые будут изменяться с помощью операторов модификации внутри триггера.

Ограничения, правила и значения по умолчанию могут генерировать только стандартные системные ошибки. Если вам нужны собственные сообщения, вы должны использовать триггеры.

Размышления по использованию триггеров

Рассматривайте следующие факты и рекомендации, когда используете триггеры:

*  Большинство триггеров реагирующие; ограничения и INSTEAD OF триггеры профилактические. Триггеры выполняются после операторов INSERT, UPDATE или DELETE, они вызываются на таблице, на которую они объявлены. Для примера, оператор UPDATE обновляет строки в таблице, и триггер на эту таблицу выполняется автоматически.

*  Ограничения проверяются первыми.