从数据库中删除记录或只是在读取期间隐藏它们?

时间:2013-02-27 15:40:53

标签: sql database database-design

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

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

这是我的清单。我错过了名单上的哪些项目?列表的优先级是否良好?

Delete

  1. 基本原理:减小表大小/提高数据库性能
  2. 理由:如果数据创建微不足道,则非常有用
  3. 解决方案:SQL DELETE
  4. is_hidden

    1. 理由:允许用户/ DBA恢复数据/对敏感&难以CREATE数据
    2. 理由:如果有必要,可以DELETE
    3. 解决方案:SQL SELECT ... WHERE is_hidden!=1
    4. 思想?

3 个答案:

答案 0 :(得分:3)

您可能希望进行软删除的主要原因是审计跟踪需要它。例如,我们可能会有一张发票表以及一个空白列,我们通常可能会省略无效发票。这保留了审计跟踪,因此我们知道输入了哪些发票以及哪些发票无效。

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

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

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

答案 1 :(得分:2)

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

DELETE 将完全删除该条目

is_hidden = 1 会隐藏它。

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

关于表现:

您可以使用两个表:

  • 1表示可见物品
  • 1为隐藏的

甚至还有三张桌子:

  • 1 for visible
  • 1 for hidden
  • 1作为存档,您可以移动所有超过3年的隐藏数据

或者:

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

这完全取决于你。但是,如果你看看Facebook或谷歌:他们永远不会删除任何东西!数据==金钱==权力;)

答案 2 :(得分:1)

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