2011-11-25 50 views
2

出於某種原因,有人告訴我永遠不要刪除任何MySQL記錄。只需將其標記爲已刪除。我應該刪除我的MySQL記錄,還是應該有一個「is_deleted」標誌?

例如,我正在構建一個「關注」社交網絡,如Twitter。

+-------------+------------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+-------------+------------+------+-----+---------+----------------+ 
| id   | int(11) | NO | PRI | NULL | auto_increment | 
| user_id  | int(11) | NO |  | NULL |    | 
| to_user_id | int(11) | NO |  | NULL |    | 
+-------------+------------+------+-----+---------+----------------+ 

用戶1如下:用戶2 ...

所以,如果一個用戶停止關注的人,我應該刪除此記錄嗎?或者我應該爲is_deleted創建一個列?

+3

這取決於。想想你自己;這個記錄會不會再被需要_?如果沒有,請刪除它。如果你認爲可能,保留它。 – Bojangles

+0

這取決於你是否可能需要刪除記錄 - 恢復它們,或作爲訴訟中的證據等。 –

+0

['active'flag or not?]的可能重複(http://stackoverflow.com/questions/) 102278/active-flag-or-not) –

回答

-1

我一直都很喜歡創建一個blnDeleted字段,並用它來代替刪除記錄。如果將數據保留在數據庫中,恢復或添加數據會容易得多。

你可能會認爲你永遠不會再需要數據,但它是可能的。即使是像追蹤退訂或類似的事情一樣簡單。

0

我不會說「從不刪除任何MySQL記錄」。這取決於。如果你想跟蹤用戶交互,你可以通過使用刪除標記來完成。您甚至可以創建一個獨立的日誌記錄表,使用相應的用戶標識和時間戳跟蹤每個操作,如「跟隨」和「取消關注」,最終爲您提供更多信息。

這取決於您,取決於您要存儲哪些數據。並請考慮您的用戶的隱私。如果他們希望他們的數據被明確刪除,那就這樣做。

4

這是一個名爲「軟刪除」的概念。谷歌在那個時期尋找更多。但用標記標記只是一種選擇 - 你也可以實際執行刪除操作,但是有一個觸發器,它將一個副本存儲在歷史記錄表中。這樣您就不必更新所有的選擇功能來專門過濾掉已刪除的記錄。此外,您不必在桌面上加載太多的負載,因爲您必須掃描亂拋桌面的其他記錄。

1

歸納一下:「你不應該刪除記錄」大概念會(也應該)可能會得到這個問題進行封閉沒有建設性,但是你給一個特定的場景:

用戶1如下:用戶2 ...

因此,如果一個用戶停止關注某人,我應該刪除此記錄嗎? 或者我應該爲is_deleted創建一個列嗎?

在你的情況下,答案取決於,後停止關注,你以後再需要知道用戶1跟隨的用戶2.有些編造的,可能是愚蠢的,例子,其中這可能是這樣的:

  • ,如果它是需要更改文本用戶1選舉從「跟隨用戶2」遵循用戶2時,看到「再按照用戶2?真的嗎?你沒有汲取教訓?」
  • ,如果你想顯示用戶2誰(或合共多少)的追隨者,他們已經有一段時間

的圖表如果您不需要依賴於過去狀態的功能用戶相互關注,那麼刪除記錄是安全的。當you ain't gonna need it時無需承擔軟刪除的複雜性。

+0

你有一些很好的觀點和強烈的建議。 –

相關問題