gpt4 book ai didi

database - 外键有什么问题?

转载 作者:太空狗 更新时间:2023-10-30 01:36:43 30 4
gpt4 key购买 nike

我记得听到 Joel Spolskypodcast 014 中提及他几乎从未使用过外键(如果我没记错的话)。但是,对我来说,它们对于避免整个数据库中的重复和后续数据完整性问题似乎非常重要。

人们是否有充分的理由来说明原因(避免根据 Stack Overflow 原则进行讨论)?

编辑: "I've yet to have a reason to create a foreign key, so this might be my first reason to actually set up one."

最佳答案

使用外键的原因:

  • 你不会得到孤立行
  • 你可以获得很好的“删除级联”行为,自动清理表
  • 了解数据库中表之间的关系有助于优化器规划您的查询以最有效地执行,因为它能够更好地估计连接基数。
  • FKs 给出了一个非常重要的提示,说明哪些统计数据对数据库收集最重要,这反过来会带来更好的性能
  • 它们支持各种自动生成的支持——ORM 可以自行生成,可视化工具将能够为您创建漂亮的架构布局,等等。
  • 项目的新人会更快地进入事物的流程,因为隐含的关系会被明确记录下来

不使用外键的原因:

  • 您让数据库在每个 CRUD 上都额外工作操作,因为它必须检查 FK 一致性。如果您有很多客户流失,这可能是一笔巨大的成本
  • 通过强制关系,FK 指定您必须添加/删除事物的顺序,这可能导致数据库拒绝执行您想要的操作。 (当然,在这种情况下,您要做的是创建一个孤立行,这通常不是一件好事)。当你进行大批量更新时,这是特别痛苦的,你先加载一个表,第二个表创建一致的状态(但是如果第二次加载有可能失败并且你的数据库现在不一致?)。
  • 有时你事先知道你的数据会变脏,你接受它,并且你希望数据库接受它
  • 你只是太懒了:-)

我认为(我不确定!)大多数已建立的数据库都提供了一种方法来指定未强制执行的外键,并且只是一些元数据。由于不强制执行消除了不使用 FK 的所有理由,如果第二部分中的任何理由适用,您可能应该走那条路。

关于database - 外键有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/83147/

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