トリガー(DB)
INSERT/UPDATE/DELETEのたびに自動実行されるDB側の手続き。BEFORE/AFTERと行/文レベルがあり、監査ログ、非正規化、導出列、業務ルールに使われる。
PostgreSQLではトリガーが関数(PL/pgSQL、PL/Pythonなど)を呼び出し、MySQLではトリガー本体を直接書く。トレードオフは、ロジックが隠れることだ。「この列はなぜ変わるのか」という疑問の答えがアプリのコードになく、DBスキーマを掘る羽目になる。重いトリガーは単純なUPDATEまで遅くする。現代の代替策は、CDCとアプリ側のハンドラによる疎結合である。典型的なアンチパターンは、別のUPDATEを呼ぶトリガーがさらに別のトリガーを発火させ、再帰的に爆発するケース。現在のベストプラクティスは、業務ロジックにはトリガーを避け、監査証跡には使ってよいというものである。