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. 刪除數據庫中的記錄cakephp
- 2. 刪除數據庫中的記錄
- 3. 如何從數據庫記錄中刪除¶(pilcrow)標記
- 4. 刪除SQL Server 2005數據庫中的表記錄並保留已刪除的記錄
- 5. 根據另一個數據庫中的表記錄刪除Hive中的記錄
- 6. Vaadin從數據庫中刪除記錄
- 7. 從數據庫中刪除記錄
- 8. 從數據庫中刪除記錄
- 9. 從數據庫中刪除記錄
- 10. 從數據庫中刪除記錄
- 11. 從MySQL數據庫中刪除記錄
- 12. 批量刪除記錄在數據庫
- 13. 刪除記錄,但在數據庫
- 14. 表中的已刪除標記
- 15. 從列表視圖中的數據庫刪除記錄在vb
- 16. 如何從SSIS中的目標數據庫中刪除記錄
- 17. 在大型數據庫緩存中刪除或標記爲已刪除?
- 18. 從gridview刪除記錄,但不是從數據庫中刪除記錄
- 19. 刪除數據庫中連接的多個表中的記錄
- 20. 從sqlite數據庫刪除記錄
- 21. AJAX呼叫刪除數據庫記錄
- 22. 刪除聊天記錄從數據庫
- 23. 從MDF數據庫刪除記錄
- 24. 從sqlite數據庫中的表中刪除所有記錄
- 25. 已刪除記錄的當前計數
- 26. 刪除插入目標表中已有的新記錄
- 27. 從mysql數據庫的所有表中刪除一條記錄
- 28. 從數據庫的所有表中刪除所有記錄
- 29. 批量刪除數據庫表中的記錄
- 30. 已刪除的記錄沒有從列表中刪除