gpt4 book ai didi

mysql - 关系数据库 : DELETE versus "Mark for Deletion"

转载 作者:搜寻专家 更新时间:2023-10-30 20:03:55 24 4
gpt4 key购买 nike

最近,我无意中遇到了以下问题:Given 是一个包含“Books”和“Authors”的简单数据模型。每本“书”都有对“作者”的引用。持久性是通过关系数据库实现的。除了添加书籍和作者外,还可以删除它们。通常,如果我想删除作者,我会执行 SQL DELETE 操作并删除相应的行。但是,我在其他项目中看到,人们不调用 DELETE。相反,他们添加某种事件/删除标志并将相应的行标记为“已删除”。

我的问题是:这通常是最佳做法吗?有什么好处?我最好的猜测是:

  • 设置标志比DELETE操作有更好的性能
  • 如果空间不足,仍然可以运行清理服务来查找已删除的对象并删除相应的行
  • 设置删除标志更利于数据库的一致性,因为在上面的示例中删除“作者”可能会破坏相应“书籍条目”中的外键。

无论如何,这些只是猜测。有人知道答案吗?

最佳答案

不使用delete 的原因有很多。首先,维护历史非常重要。我不会“仅”使用删除标志,而是使用有效日期。

其次,在操作系统中,delete 可能是一项开销很大的操作。该行需要从表中删除,从关联的索引中删除,然后可能会有级联删除和触发器。

第三,delete 可以防止其他操作正常工作,因为表、行和索引被锁定。这会降低操作系统的速度,尤其是在高峰期。

第四,delete 可能难以维护关系的完整性——尤其是在未定义那些级联删除的情况下。

第五,存储便宜。处理能力很便宜。所以,对于很多数据库来说,删除记录来回收空间是完全没有必要的。

这并不意味着您应该始终避免删除记录。但是有非常充分的理由不急于删除数据。

关于mysql - 关系数据库 : DELETE versus "Mark for Deletion",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45078490/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com