2
A
回答
6
就是這樣 - 一個布爾型字段來表示記錄被刪除。我用過的那幾次,我叫那個字段IsDeleted
。
這通常被稱爲邏輯刪除。
您需要尊重報告中的該字段 - 這意味着排除所有IsDeleted = true
的記錄。如果你有很多表和關係,這些查詢可能會變得有點複雜。
另外,如果您在表上有獨特的約束條件,則可能會遇到一些問題。例如,如果在用戶表中用戶有IsDeleted = true
,並且電子郵件列是唯一的,我將無法使用相同的電子郵件地址添加新用戶。
有些ORM會考慮這些字段 - 例如,如果存在名爲'Deleted'或'IsDeleted'的列,SubSonic 2.2將不會刪除記錄,而是將該字段設置爲true。
一些相關的資源:
- Physical vs. logical/soft delete of database record?
- Should I delete or disable a row in a relational database?
- Working with SubSonic 'deleted' rows
- ORM & Logical Delete
作爲替代這個你可以添加審計表。
1
我認爲這是一個好的解決方案。另一種方法是將數據移動到另一個表,某種歷史表,因此在包含活動數據的表中搜索數據會更快。但這取決於你的情況。
2
我通常使用IsDeleted。
如果存在多個狀態(例如normal,archive,deleted),我可能會使用Enum(或Int,如果不可用)來表示狀態。通常我會在這種情況下命名字段狀態或狀態。
1
在銀行業,存儲所有的修改(不僅僅是刪除)被認爲是一種很好的做法。通常它是在「日誌表」中完成的,DDL與原始日誌表幾乎相同,外加幾個標誌來指示操作類型,日期&時間,用戶等。但是(非常重要的)日誌表是沒有唯一鍵的定義!
1
我會使用datetime,null爲活,timstamp爲「刪除」。
這是完美的
if(timestamp) {}
,因爲它默認爲空。
相關問題
- 1. 如何從數據庫記錄中刪除¶(pilcrow)標記
- 2. 根據另一個數據庫中的表記錄刪除Hive中的記錄
- 3. 刪除記錄,但在數據庫
- 4. 從數據庫中刪除記錄
- 5. 表中的已刪除標記
- 6. 如何從SSIS中的目標數據庫中刪除記錄
- 7. 刪除數據庫中連接的多個表中的記錄
- 8. AJAX呼叫刪除數據庫記錄
- 9. 刪除聊天記錄從數據庫
- 10. 從sqlite數據庫刪除記錄
- 11. 已刪除記錄的當前計數
- 12. 刪除插入目標表中已有的新記錄
- 13. 從數據庫的所有表中刪除所有記錄
- 14. 批量刪除數據庫表中的記錄
- 15. 從Access數據庫中刪除記錄,刪除時出錯
- 16. 刪除數據或只是將其標記爲已刪除?
- 17. R - 刪除數據幀中的記錄
- 18. 提交表單後記錄沒有從數據庫中刪除
- 19. 如何從數據庫表中自動刪除舊記錄?
- 20. 如何正確地從數據庫中刪除記錄列表?
- 21. 數據庫中已刪除記錄的數字主鍵是否會被重新用於未來的新記錄?
- 22. 使用數據綁定從數據庫中刪除記錄
- 23. 數據庫:刪除或不刪除記錄
- 24. MySQL從表或更新表列刪除標記爲已刪除?
- 25. 如何刪除CouchDB中的數據庫中的所有記錄?
- 26. 刪除標記時刪除標記
- 27. 在數據庫表上記錄數據
- 28. 在mysql數據庫中只刪除一條記錄
- 29. 從Ajax請求中刪除數據庫中的記錄
- 30. 保留已刪除項目的記錄