2010-06-25 85 views
4

我正在構建一個內容管理網站,其中還包含其他功能。當管理員通過管理面板刪除項目時,我希望此項目被移至「回收站」30天(然後自動刪除)。SQL Server'回收站'

實施此功能的最佳方法是什麼?

我的一個想法是在我的表中有一個'已刪除'位列,然後只顯示記錄WHERE Hide=0。然而,這意味着必須記住每次從表格中輸入我的SELECT

我的另一個想法是有第二個表,其中的記錄將被刪除時移動到第二個表。然而,我在我的網站中使用了很多表格,因此這意味着表格數量翻倍,並且具有重複的表格結構(這可能會在未來導致一致性問題)。

理想情況下,我希望有一個'RecycleBin'表將所有記錄移動到,但這可能包含100個列以便能夠存儲來自所有不同表的數據。

如果任何人有任何其他的想法,它將不勝感激。

謝謝。

回答

7

我所知道的大多數實現都使用deleted列(不是布爾值,而是時間戳,因此您可以知道它何時被刪除)。是的,您需要將其添加到所有查詢中,但也許您正在使用ORM圖層,因此您只需添加一次?我會建議走這條路。

維基百科對他們的文章的當前版本和歸檔版本使用多個表格,但這是因爲它們不是聯盟巨大的版本,而且當前版本的請求比舊版本要多得多。

如果要使用一個RecycleBin表,則可能需要考慮序列化行並將它們放入value列中,而不是存儲所有單個列。當然,這隻適用於不需要查詢已刪除項目的單個列的內容,因爲這將非常昂貴。

+0

啊好的,這聽起來像個好主意。我正在考慮有一個刪除位列和一個DeletedDate日期時間列,所以你的想法結合了這兩個!謝謝 – Curt 2010-06-25 09:42:55

0

使用IsDeleted列是一種很好的技術。

你可以結合使用刪除而不是觸發器,它將使用標誌而不是常規的刪除操作。您也可以使用視圖封裝表格,以便在視圖中僅顯示非刪除行。