2012-04-10 84 views
1

通常使用哪種字段來伴隨軟刪除?任何這些,任何其他?軟刪除關於級聯恢復的常用屬性

bool IsDeleted // nice because the default value is 0 (no) just in case 
date DateDeleted // is this a common one? 
date DateCreated // more of a temporal db aspect 
date DateModified // same with respect to created 

我問的原因是,當使用軟刪除時,爲了保持完整性,必須執行級聯。然而,真正的技巧不是級聯刪除,這很容易。

The trick is cascade restoring。在級聯刪除中,使用軟刪除方案時,關係圖中的所有記錄都被標記爲已刪除,無論標記是否爲非活動狀態,也許差異在於將datedeleted更改爲null。在級聯還原時,必須評估記錄引用,以查看它們被刪除的原因是與正在恢復,重新激活,未刪除的記錄相關的級聯刪除的結果。

級聯還原操作如何處理存儲的數據?

回答

1

在要跟蹤,不僅發生了什麼結果的情況下,也它發生和爲什麼,人們經常使用事務日誌

事務日誌表通常具有諸如事件日期/時間,事件性質(插入,更新,刪除...)以及執行操作的用戶和/或過程等列。事務日誌和基表中受影響的記錄之間還有一個鏈接。這可以通過基表上的外鍵對事務日誌表來完成,但事務日誌包含基表的外鍵更爲常見。如果事務日誌表在各種基表之間共享,則需要基表指示符加上基表外鍵。

在你的情況下,如果刪除是主要問題,你可以限制日誌條目刪除,並區分級聯刪除和其他刪除。您可以(應該)也考慮使用事務包裝器一次寫入所有軟刪除(主要級聯)。您可以在日誌中包含某種標識符,例如標識值或GUID作爲「業務事務ID」,並將該ID放入作爲同一操作一部分的每個條目中。這給你一個清楚的指示,說明發生了什麼,什麼時候發生,爲什麼發生,以及發生了什麼記錄。您將能夠使用這些信息來決定如何撤消任何特定事務,包括執行級聯恢復。

+0

主要問題是恢復。刪除相當簡單。但是,當以級聯的反向方式恢復時,很難判斷是否有可能恢復級聯圖時,可能已經刪除了圖的依賴關係,而要恢復的圖被標記爲非活動狀態。 – 2012-04-11 17:14:18

+0

看到這個問題的恢復更詳細的問題:http://stackoverflow.com/q/10111699/1026459 – 2012-04-11 18:30:30

+0

@TravisJ - 我在我的回答指出,我推薦的交易日誌表解決方案包括一個「商業交易ID」有助於澄清層疊的內容。通過查找具有相同業務交易ID的所有更改,您可以找到在刪除時完成的所有步驟。您可以按照以下步驟執行還原。您可能遇到的唯一可能的問題是級聯刪除項目是否還具有其他依賴關係,這些依賴項可能在另一個業務事務ID下被軟刪除。這應該是罕見的。 – 2012-04-11 19:13:54