Я все еще ищу ту книгу, в которой определена «лучшая практика» - думаю, я найду ее рядом с «Большой книгой базы данных no-nos».
Лично я рекомендовал командам избегать триггеров, где это возможно.
У меня был плохой опыт с ними - я согласен, что удары молотком не делают всех молотков злыми, но спусковые механизмы больше похожи на гвоздодеры, чем на молотки - определенно существует возможность причинения вреда.
Триггеры - это «побочные эффекты» - вы явно хотите вставить запись в таблицу; как побочный эффект этого намерения, целый ряд других вещей происходит. В большинстве команд, с которыми я работаю, нет «парня из базы данных» - разработчики работают на нескольких уровнях, и сохранение всех побочных эффектов в их мозгу обременительно. Это создает возможность для ошибок и проблем с производительностью - не потому, что кто-то глуп или ленив, а потому, что технология стала более сложной.
Существуют проблемы, которые лучше (или даже единственно) решаются с помощью триггеров - обеспечение ссылочной целостности является классикой. Есть проблемы, которые часто решаются с помощью триггеров, которые заставляют меня нервничать, особенно когда они отражают бизнес-правила или использование таблицы аудита. Есть проблемы, которые, на мой взгляд, слишком близки к триггеру гвоздя, чтобы их можно было решить с помощью триггеров, например, расчетов в бизнес-сфере (например, расчет суммы налога для продажи).