4

我想知道是否有人可以提供各种理由/解决方案来了解何时从数据库中删除记录,而不是在读取操作期间通过字段值(例如is_hidden=1.

我的应用程序是一个社交网络/电子商务网络应用程序。我倾向于支持这种is_hidden策略,但随着网站的增长,我可以看到这会导致网站的表现非常糟糕。

这是我的清单。我缺少清单上的哪些项目?列表的优先级是否良好?

Delete

  1. 理由:减少表大小/提高数据库性能
  2. 基本原理:如果数据创建起来很简单,则很有用
  3. 解决方案:SQLDELETE

is_hidden

  1. 理由:允许用户/DBA 恢复数据/对敏感和难以处理的CREATE数据有用
  2. 理由:DELETE如有必要,以后可以吗
  3. 解决方案:SQLSELECT ... WHERE is_hidden!=1

想法?

4

3 回答 3

4

您可能想要进行软删除的主要原因是审计跟踪需要它。例如,我们可能有一个发票表和一个作废的列,我们通常可能只是忽略作废的发票。这保留了审计跟踪,因此我们知道输入了哪些发票以及哪些发票已作废。

出于这个原因,有许多领域(尤其是金融领域)首选软删除。通常,与数据集相比,删除的数量很小,并且您不想真正删除,因为实际上这样做可能会让某人为盗窃金钱或现实世界的商品提供掩护。然后可以为那些需要它的查询显示“已删除”的数据。

一个很好的非数据库示例如下:“在您的普通日记帐或总账中书写时,请用笔书写,如果您立即发现错误,请用单行划掉,以便原始数据仍然清晰,并在下面写正确的值。如果以后发现,要么写一个调整条目,要么写一个反转和一个新的。在这种情况下,您的主要理由是查看何时更改了哪些内容,以便在有问题时审核这些更改。

通常需要查看此类信息的人可能是财务或其他审计师。

于 2013-02-28T04:21:33.663 回答
3

你已经在你的问题中说了一切:

DELETE将完全删除该条目并

is_hidden=1将隐藏它。

所以:如果您将来可能需要这些数据,您应该使用隐藏方法。如果您确定数据将永远不会被再次使用:使用删除。

关于性能:

您可以使用两个表:

  • 1 用于可见项目
  • 1 隐藏的

甚至三个表:

  • 1 为可见
  • 1 为隐藏
  • 1 作为存档,您可以在其中移动所有超过 3 年或其他时间的隐藏数据

或者:

  • 1 用于可见和隐藏的(使用 is_hidden 标志)
  • 1 作为旧条目的存档

全取决于你。但如果你看看 facebook 或 google:他们永远不会删除任何东西!数据 == 金钱 == 权力 ;)

于 2013-02-27T15:55:14.383 回答
1

就性能和易于开发而言,您的平台上可能有过滤索引、索引视图等,这意味着保留软删除的数据对您的系统几乎没有影响。

于 2013-02-28T04:41:39.677 回答