最近,我偶然发现了以下问题:给出了一个简单的数据模型,其中包含" Books"和#34;作者"。每个" Book"提及"作者"。使用关系数据库实现持久性。除了添加书籍和作者外,还可以删除它们。通常,如果我想删除一个Author,我会执行SQL DELETE
操作并删除相应的行。但是,我在其他项目中看到,人们不会打电话给DELETE
。相反,他们添加某种活动/删除标记并将相应的行标记为"删除"。
我的问题是:这是一般的最佳做法吗?有什么好处?我最好的猜测是:
DELETE
操作无论如何,这些只是猜测。有人知道答案吗?
答案 0 :(得分:5)
不使用delete
的原因有很多。首先,保持历史非常重要。我不会使用"只是"删除标志,但具有有效日期。
其次,在操作系统中,delete
可能是一项昂贵的操作。需要从表中删除该行,从关联的索引中删除该行,然后可能存在级联删除和触发器。
第三,delete
可以阻止其他操作正常工作,因为表和行以及索引被锁定。这可能会减慢操作系统的速度,特别是在高峰期。
第四,delete
可能很难保持关系完整性 - 特别是如果没有定义那些级联删除。
第五,存储便宜。处理能力便宜。因此,对于许多数据库而言,删除记录以恢复空间是不必要的。
这并不意味着您应该始终避免删除记录。但是有一些非常有效的理由不急于删除数据。