Trigger
策略 RE 數據庫觸發器在設計良好的應用程序中?
我聽說過各種關於居住在數據庫觸發器中的 gremlins 的恐怖故事,而且——更糟糕的是——系統因添加一個觸發器而導致一連串級聯的觸發器崩潰。
我正在考慮實施有關使用數據庫觸發器的嚴格政策。對於關注點分離,最初的想法是說:
“數據庫觸發器應僅用於擷取和維護審計跟踪的目的。”
- 有沒有人有類似的政策?
- 有沒有強烈反對這種政策的論據?
聽起來我們對觸發器的使用持有相似的觀點,但我很想听到其他 DBA 的相反意見。就個人而言,我將它們視為最後的手段,並且僅在沒有其他選擇的情況下實施觸發器。例外是 INSTEAD OF 觸發視圖。
當您增強 3rd 方解決方案並且系統 API 不公開擴展點時,觸發器通常是唯一的選擇。在我可以完全訪問原始碼的情況下,我還沒有遇到過首先想到觸發器的情況。
審計就是一個很好的例子。在第 3 方應用程序中,觸發器可能是唯一的選擇。如果您可以訪問原始碼,它肯定不是唯一的選擇,儘管它可能是風險最低/最便宜/最簡單(如適用,刪除)的選項。如果數據庫API設計得好,就會有其他入口點來添加審計。
儘管我對觸發器有想法,但我不會強加您建議的嚴格政策。在我看來,在許多組織中持續存在的 DBA 與開發人員的心態源於這種類型的指導被感知的方式。嘗試鼓勵協商,而不是發號施令。