我有一個要求更改具有5個子外鍵關係的表上的Web應用程序上的「刪除」功能的行爲。它是一個相當大的Web應用程序,所以我正在尋找風險最小,影響最小的更改,以便它將對Web應用程序進行最少量的更改。如何在SQL中使用外鍵關係實現軟刪除數據?
我能想到的兩個選項:
列添加到表
deleted
默認0
,並且1
將指示記錄已被刪除。這將需要更新表上的所有選擇(以及在它的子表上,因爲它們現在是孤立的),以包括子句where deleted = 0
。網絡應用程序是舊的,寫得不好(重複代碼),所以有很多地方需要這種改變,因此可能會錯過一個或多個位置是有風險的。將記錄移動到表的另一個副本,專門用於刪除的記錄。我可能也需要鏡像每個子表。
選項1似乎是更多的努力了前面,但是在將來更易於維護,選擇2是沒有太多的工作了前面,微小的變化對Web應用程序,但非常凌亂。還有其他選擇嗎?
如果你的SQL Server 2016上,也許行級安全期權1將工作(過濾刪除= 0)https://msdn.microsoft.com/en-us/us-en/library/dn765131 .aspx – vercelli
改變行爲背後的原因是什麼?如果你打算使用這些軟刪除記錄,例如。顯示歷史數據比選項1基本上是唯一的選擇。從架構的角度來看,我也會選擇1,因爲同步兩個數據庫鏡像將會產生問題,特別是如果有人會對源進行一些結構更改 - 那麼您將從這一點開始跟蹤2個數據庫的更改,這不是我會推薦。 – StormoPL