Триггеры являются требованием для любых сложных правил целостности данных. Они не могут быть применены нигде, кроме базы данных, иначе у вас будут проблемы с целостностью данных.
Они также являются лучшим местом для аудита, если вы не хотите регистрировать все изменения в базе данных (что является проблемой аудита из приложения).
Триггеры могут вызывать проблемы с производительностью, если они не написаны тщательно, а разработчики недостаточно осведомлены, чтобы хорошо их написать. Это часть того, где они получают свой плохой рэп.
Триггеры часто медленнее других средств поддержания целостности данных, поэтому, если вы можете использовать проверочное ограничение, используйте его вместо триггера.
Легко написать плохие триггеры, которые делают глупые вещи, такие как попытка отправить электронную почту. Вы действительно хотите быть не в состоянии изменить записи в БД, если почтовый сервер выходит из строя?
В SQL-сервере триггеры работают с партией записей. Слишком часто разработчики думают, что им нужно обрабатывать только одну вставку, обновление или удаление одной записи. Это не единственный вид изменений данных, которые происходят с базой данных, и все триггеры следует тестировать в условиях изменения 1 записи и множества изменений записи. Если вы забудете выполнить второй тест, это может привести к крайне плохо выполненным триггерам или потере целостности данных.