我不认为我是唯一对此感到好奇的人。您通常会如何处理数据库行为?您是否更愿意从数据库中删除记录?还是只用“已删除”标志或布尔列标记记录以表示记录是活动的还是不活动的更好?
我不认为我是唯一对此感到好奇的人。您通常会如何处理数据库行为?您是否更愿意从数据库中删除记录?还是只用“已删除”标志或布尔列标记记录以表示记录是活动的还是不活动的更好?
Answers:
它绝对取决于数据库的实际内容。如果您使用它来存储会话信息,那么在会话过期(或关闭)时一定要立即擦除它,您不希望这些垃圾随处可见。因为它实际上不能再用于任何实际目的。
基本上,您需要问自己什么,我是否需要恢复此信息?就像SO上的已删除问题一样,由于我们正在积极允许取消删除,因此绝对应该将它们标记为“已删除”。我们也可以选择显示它,以选择用户,而无需进行过多的工作。
如果您不是积极寻求完全还原数据的方法,但仍希望保留它以用于监视(或类似目的)。我建议您(在可能的范围内)找出一个聚合方案,并将其推到另一个表中。这将使您的主表清除“已删除”的数据,并使次表保持最佳状态以进行监视(或您考虑的任何内容)。
有关时间数据,请参阅:http : //talentedmonkeys.wordpress.com/2010/05/15/temporal-data-in-a-relational-database/
作为所有帖子的补充...
但是,如果您打算标记该记录,则可以考虑对活动记录进行查看。这样可以避免编写或忘记SQL查询中的标志。如果您认为非活动记录的视图也可以起到一定作用,那么您也可以考虑该视图。
我很高兴找到这个线程。我也想知道人们对这个问题的看法。我已经在许多系统上实施了“标记为已删除”大约15年。每当用户打电话说某事被意外删除时,将其标记为未删除肯定比重新创建或从备份还原要容易得多。
我们正在使用postgresql和Ruby on Rails,看起来我们可以通过以下两种方式之一来执行此操作:修改Rails或添加ondelete触发器,而是使用pl / pgsql函数将其标记为已删除。我倾向于后者。
至于性能方面的问题,有趣的是,在大表上看到EXPLAIN-ANALYZE的结果,删除的项目很少,删除的项目很多。
在我发现随着时间推移而使用的系统中,新用户往往会做一些愚蠢的事情,例如意外删除。因此,当某人是新手时,除了零经验外,他们都拥有该人以前的所有访问权限。意外删除某些内容并能够快速恢复,使每个人都能快速恢复工作。
但是正如某人所说,有时出于某种原因您可能需要返回特定的密钥,这时您需要真正将其删除,然后重新创建记录(取消删除并修改记录)。