数据库:删除还是不删除记录
问题出现的原因:
- 当需要删除记录时,可以考虑将记录标记为非活动状态,而不是直接删除。这样可以避免在SQL查询中编写或忘记标记。
解决方法:
- 创建一个视图,用于显示活动记录。这样可以避免在SQL查询中编写或忘记标记。
- 可以考虑创建一个视图,用于显示非活动记录,如果认为这也有一定的用途。
代码示例:
CREATE VIEW active_records AS
SELECT * FROM records WHERE active = true;
CREATE VIEW inactive_records AS
SELECT * FROM records WHERE active = false;
以上是关于是否删除数据库记录的讨论,如果需要删除,请考虑将记录标记为非活动状态并创建相应的视图。
使用删除标志的优点:
1. 如果需要,可以随时恢复数据,
2. 删除操作(更新标志)可能比真正删除更快
使用删除标志的缺点:
1. 在SQL语句中很容易忽略AND DeletedFlag = 'N'
2. 在所有垃圾数据中查找感兴趣的行速度较慢
3. 最终,您可能还是希望真正删除它(假设您的系统成功。当该记录在创建后的4分钟内被“删除”,且记录已经存在10年时会怎样)
4. 它可能使使用自然键变得不可能。您可能有一个或多个带有自然键的已删除行,以及一个希望使用相同自然键的真实行
5. 可能存在法律/合规原因,要求您实际删除数据。
问题的原因:
对于数据库中的记录,是否应该使用删除标志进行逻辑删除而不是真正删除。
解决方法:
在决定是否使用删除标志时,需要考虑使用删除标志的优点和缺点,以及可能的法律和合规要求。另外,在使用删除标志时,需要确保在相应的SQL语句中包含正确的逻辑删除条件AND DeletedFlag = 'N'
,以免出现遗漏。最终,根据具体情况和需求,决定是否真正删除数据。
数据库:删除还是保留记录的问题
当然取决于数据库中的实际内容。如果您正在使用它来存储会话信息,那么当会话过期(或关闭)时立即清除它,您不希望垃圾留在那里。因为它不能再被用于任何实际目的。
基本上,你需要问自己,我可能需要恢复这些信息吗?就像 SO 上的已删除问题一样,它们绝对应该被标记为“已删除”,因为我们正在积极允许取消删除。我们还有选择将其显示给某些用户,而无需做太多额外的工作。
如果您不主动寻求完全恢复数据,但仍希望保留它以进行监控(或类似)目的。我建议您找出(在可能的范围内)一个聚合方案,并将其分配到另一个表中。这将使您的主要表中保持“已删除”数据的清洁,同时使您的辅助表针对监控目的(或您设想的其他目的)进行优化。
对于时间数据,请参见:http://talentedmonkeys.wordpress.com/2010/05/15/temporal-data-in-a-relational-database/