Sql-Server

在每個外鍵上使用 ON DELETE CASCADE 的缺點?

  • September 9, 2020

BIT我們的應用程序目前在大多數帶有“已刪除”列的表中都內置了“軟刪除” 。

現在需要“硬刪除”功能。

ON UPDATE CASCADE ON DELETE CASCADE添加到數據庫中的每個外鍵時,是否有任何缺點、陷阱或需要牢記的事情?

除了前面提到的“哎呀”,您刪除了您不打算刪除的記錄,現在很多相關記錄也消失了,您可能根本無法級聯刪除所有內容。

使用級聯時要記住的一點是,如果有多個級聯路徑,它可能會導致衝突。SQL Server 和其他 DBMS 將通過級聯阻止外鍵的創建。

如果你要刪除所有的級聯,你幾乎肯定會遇到這個問題,要麼必須重新處理關係,要麼選擇哪些外來鍵實際上會得到級聯,而哪些沒有。

帶有插圖的範例(不是我的來源)的說明 連結

解決它的一種方法是使用過程/“前端”程式碼(在呼叫數據庫的應用程序中執行刪除訂單管理),或使用觸發器。試著與之保持一致。如果您的數據模型允許您不命中多個級聯路徑,並且您確定您不介意“糟糕”。然後一定要使用它。

如果您要使用多個級聯路徑,我的建議是使實施的解決方案保持一致。有一些級聯,一些觸發器,一些通過程序做管理。只是使程式碼雜亂無章。

引用自:https://dba.stackexchange.com/questions/275212