Когда триггеры базы данных плохо?

Возможный дубликат:
Являются ли базы данных триггерами зла?

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

Ответ 1

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

Когда вы начинаете изменять свои "живые" данные или "перебирать назад" в свои информационные таблицы, которые становятся злыми и громоздкими. Они также совершенно ненужны для этого. Нет ничего, что может вызвать триггер, который хранимый процесс не может сделать.

Я чувствую, что они являются SQL-злом, эквивалентным GOTO на языках программирования. Правовые, но их следует избегать, если они абсолютно необходимы, и они НИКОГДА не нужны.

Ответ 2

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

Особенности, которые следует учитывать перед попыткой использования триггеров:

Проверить ограничения

Ограничения внешнего ключа

Уникальные индексы/ограничения

Вычисляемые столбцы

(Persisted)

(индексированные) представления (если триггер пытается что-то вроде обновления агрегата, скажем)

Хранимые процедуры (если прямой доступ к таблице может быть запрещен)

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

Ответ 3

Потому что они "волшебные". Они не очень заметны, и они могут много работать.

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

Ответ 4

Вот несколько статей, которые помогут вам разобраться в ваших потребностях.

Короче говоря, Triggers полезны для обработки огромного количества данных, когда должен выполняться сложный DML. Чтобы ответить на ваш вопрос, если это не так, вы получили свой ответ, когда срабатывает триггер.