我正在項目中的數據庫項目不被刪除,但只標記爲已刪除。事情是這樣的:當我想使用數據庫約束,但只標記爲刪除而不是刪除時該怎麼辦?
id name deleted
--- ------- --------
1 Thingy1 0
2 Thingy2 0
3 Thingy3 0
我想能夠定義喜歡上了name
列的唯一約束的東西。看起來很簡單,對吧?讓我們設想一個場景,其中「Thingy3」被刪除,並創建一個新的(可能幾年後)。我們得到:
id name deleted
--- ------- --------
1 Thingy1 0
2 Thingy2 0
3 Thingy3 1
...
100 Thingy3 0
但從用戶的角度,他刪除了一個項目,並創建一個新的。就像刪除一個文件並創建一個新文件一樣。所以對他來說很明顯,新項目與任何與舊項目相關的數據都是不相關的,並且沒有連接到任何數據。
這已經處理,因爲DB只關心id
,並且由於新項目的id
爲100而不是3,所以它們完全不同。
當我想阻止用戶創建另一個「Thingy3」項目時,出現了我的困難。如果我有一個UNIQUE約束只查看未標記爲deleted
的項目,那麼我將解決一個問題。
(當然,我不得不處理時,有人做刪除的撤銷會發生什麼......)
所以,我怎麼可以定義排序約束的?
順便說一句,這被稱爲軟刪除http://databaserefactoring.com/IntroduceSoftDelete.html – cherouvim 2009-04-21 06:08:56
很高興知道這有一個名字。謝謝! – scraimer 2009-04-21 06:28:05