2013-02-27 18 views
4

我想知道是否有人可以提供各種理由/解決方案來知道何時刪除數據庫中的記錄,而不是簡單地通過字段值在讀取操作期間隱藏它們,例如is_hidden=1從數據庫中刪除記錄或在讀取期間隱藏它們?

我的應用程序是一個社交網絡/電子商務Web應用程序。我傾向於支持is_hidden戰略,但隨着網站的增長,我可以看到這導致了一個表現糟糕的網站。

這是我的清單。我錯過了什麼樣的項目?名單的優先順序是否好?

Delete

  1. 理由:減少表的大小/提高數據庫的性能
  2. 理由:有用的,如果數據是微不足道的創建
  3. 解決方案:SQL DELETE

is_hidden

  1. 理由:允許用戶/ DBA來恢復數據/敏感&很難CREATE數據
  2. 理由有用:可以DELETE它以後如果有必要
  3. 解決方案:SQL SELECT ... WHERE is_hidden!=1

的思考?

+0

你已經給你的理由,這取決於你決定。 ':D'選擇最適合您情況的最佳選擇。 – 2013-02-27 15:44:59

+1

這可能更適合DBA堆棧交換。但是,我們通常會選擇邏輯刪除(隱藏/刪除字段)並將其設爲開發任務,以定期備份和清除「已刪除」的數據。通過這種方式,您可以保持審計線索的簡單性和能力,只是邏輯上刪除東西,但通過每隔一段時間就將其刪除即可控制數據。 – Arran 2013-02-27 15:45:24

+2

這真的取決於你自己的情況。有時你可以刪除和其他軟刪除數據。 – Taryn 2013-02-27 15:45:26

回答

3

您可能想要執行軟刪除的主要原因是審計跟蹤需要它。例如,我們可能會有一張發票表和一個無效的欄,我們通常可能會忽略無效的發票。這保留了審計線索,因此我們知道發票已輸入,哪些發票無效。

有許多領域(尤其是財務),其中軟刪除是首選的原因。通常,與數據集相比,刪除次數較少,而且您不希望真正刪除,因爲實際上這樣做可能會允許某人爲盜竊金錢或真實世界商品而進行掩護。然後可以顯示那些需要它的查詢的「刪除」數據。

一個很好的非數據庫示例如下所示:「在您的普通日記帳或總帳中寫入時,請用鋼筆書寫,如果您立即發現錯誤,請用一行代碼將其交叉出來原始數據仍然清晰,並在下面寫入正確的值,如果稍後發現,請寫入調整條目或寫入反轉和新的數據。「在這種情況下,您的主要原因是要查看發生了什麼變化,以便您可以在出現問題時審覈這些變更。

通常需要查看此類信息的人員可能是財務或其他審計人員。

2

你已經說過你的問題寄託都:

DELETE將完全刪除該條目和

is_hidden = 1將其隱藏。

所以:如果您將來可能需要這些數據,您應該使用隱藏方法。如果您確定數據永遠不會再被使用:使用delete。

關於性能:

你可以用兩個表:

  • 1可見項目
  • 1爲隱藏的人

甚至三個表:

  • 1可見
  • 1隱藏
  • 1作爲歸檔,在這裏你將所有隱藏的數據是3歲以上或東西

或者:可見

  • 1和隱藏的(使用is_hidden標誌)
  • 1作爲舊條目的歸檔文件

這完全取決於你。但是,如果你看看Facebook或谷歌:他們永遠不會刪除任何東西! Data == Money == Power;)

1

就性能和開發的簡易性而言,在您的平臺上可能會有過濾索引,索引視圖等,這意味着保留軟刪除數據對您的系統幾乎沒有影響。

+0

我使用mysql,可以開發查詢,但我選擇。你能解釋一些關於過濾索引和索引視圖的內容嗎? – 2013-02-28 05:22:59

+1

@timpeterson MySQL沒有這些功能的任何一個的等價物。 Postgres的確如此,不過http://en.wikipedia.org/wiki/Partial_index – 2013-02-28 13:30:06