2010-07-27 40 views
3

爲了保持系統的一致性我可以考慮2刪除策略:刪除實體戰略

關係中的所有實體的
  1. 級聯刪除;

  2. 模擬刪除(即,沒有真正從數據庫中刪除,但例如,實體中的字段deleted的值爲true並且它影響顯示邏輯)。

我喜歡第二種方法,但我不知道如何正確實施它。

例如,假設我們開發一個簡單的博客(用戶,文章,評論和其他平常的東西)。我們來看User實體(和一個記者表USER)。如果我們刪除某個用戶,那麼他的deleted字段將具有值true。所有用戶的評論都會保留在原來的位置,每位讀者都會知道某個評論的作者是誰。

這一切看起來不錯,但我應該怎麼做,如果一個新用戶(誰試圖進行登記)會刪除一些用戶已經指定相同的登錄/電子郵件地址(其它獨特的領域)?理論上,這個獨特的字段值已經是免費的並且可以被採用。但是,如果有一天我會決定刪除刪除的用戶,該怎麼辦?

與這種情況有關的最佳實踐是什麼?

回答

2

這真的取決於你的具體需要和你正在使用的系統的要求。

通常,「軟刪除」功能是期望的情況下,像你的榜樣的第一部分,其中即使用戶「被刪除」你不希望被從系統中刪除他們的內容。但是,在這種情況下,用戶帳戶永遠處於使用狀態,並且您將無法在將來爲其他任何人重新使用該帳戶。

在其他情況下的「級聯刪除」選項是首選,但可以成爲一個非常有趣的東西來管理,與衆多約束級聯比預期單刪除可能會影響更多的表。

我想了解你想盡可能真的在這裏既解決方案實際上是有效完成的任務是很重要的。這只是特定的商業案例,決定哪一個最適合特定的實施。

+0

我們軟刪除一切和夜間存檔了,那麼很難從生產數據庫中刪除任何軟刪除他們是在一個月以後老了。可能考慮從檔案中刪除超過六個月的軟刪除。這取決於你的需求和對他們有意義的事情。 – 2010-07-28 08:44:47

0

這聽起來像你最好的選擇是軟刪除(存放在用戶表中的標誌)。如果您想在路上重新激活用戶,您可能遇到以下情況。

用戶A是否一串東西
用戶A的進入休眠
用戶B創建的帳戶與相同的用戶ID。
用戶A想要回來。

您可能想要做的是將您網站上的所有內容都引用到唯一的用戶標識,並且永不刪除用戶。