最近,我偶然发现了以下问题:Given是一个带有“Books”和“Authors”的简单数据模型。每本“书”都有一个“作者”的参考。持久性是通过关系数据库实现的。除了添加书籍和作者外,还可以删除它们。通常,如果我想删除作者,我会执行SQL DELETE
操作并删除相应的行。但是,我在其他项目中看到,人们不会拨打DELETE
。相反,他们添加某种活动/删除标志并将相应的行标记为“已删除”。关系数据库:DELETE与“删除标记”
我的问题是:这是一般的最佳做法吗?有什么优势?我最好的猜测是:
- 设置一个标志,具有比
DELETE
操作 - 有更好的表现。如果你运行的空间,它仍然可以运行清理服务,查找删除的对象,并删除相应的行
- 设置一个删除标志是数据库一致性更好,因为“作者”的例子删除上面的程序可以在相应的“簿条目破坏外键。
不管怎样,这些都只是猜测。是否有人知道答案?