關於該主題有一些similarquestions,但它們並沒有真正幫助我。實施軟刪除,對性能和代碼影響最小
我想實現一個像StackOverflow一樣的軟刪除功能,其中的項目沒有真正刪除,但只是隱藏。我正在使用SQL數據庫。這裏有3個選項:
添加一個
is_deleted
布爾字段。- 優點:簡單。
- 缺點:沒有日期記錄。強制我在每個查詢中添加一個
is_deleted = 0
。
添加一個
deleted_date
日期字段。如果未刪除,則設置爲NULL
。- 優點:有約會。
- 缺點:仍然混亂我的查詢。
對於上述兩種
- 因爲有這些沒用的行還會影響性能。他們仍然需要維護索引。當獲取未刪除(大部分)的行時,
deleted
列上的索引也無濟於事。全表掃描是必要的。
另一種選擇是創建一個單獨的表來保存已刪除項目:查詢非刪除的行時,改進的性能:
- 優勢。無需爲我的查詢添加條件在未刪除的行上。索引維護更簡單。
- 缺點:複雜性:需要數據遷移刪除和刪除。需要新的表格。參照完整性很難處理。
有更好的選擇嗎?
什麼RDBMS?可能有數據庫級別的技巧可以幫助您的努力 – billinkc
我一直在尋找一個不可知論的解決方案,儘管Oracle,SQL Server和Postgres是首選 - 按此順序。 – Aillyn