【发布时间】:2012-01-06 07:20:34
【问题描述】:
我应该在每个相关表中使用外键还是不应该? 如果我应该使用,为什么?
【问题讨论】:
标签: database
我应该在每个相关表中使用外键还是不应该? 如果我应该使用,为什么?
【问题讨论】:
标签: database
“所有相关的表”并不总是很清楚,所以这不是一个明显的情况。可能有一些表有一个共同的列,但可能永远不会互相看到。
但是,它可以方便地防止错误越过您的主要防御,并允许输入不易追踪的数据。
如果您有适当的索引,它们无助于提高查询效率,而且一个好的应用程序会过滤足够的输入,以至于永远不需要它们。但错误时有发生,它们是廉价的防线。
如果您只是对设计数据库感到满意,那么一旦您建立了基本的父/子关系,就不需要花费大量时间来担心和细化它们。
这里有一些背景——
【讨论】:
你应该。主要有三点:
【讨论】:
使用外键是关系数据库的主要概念之一(如果不是唯一的话)。你当然应该在需要的地方使用外键。因为这有助于:
第一个意思是不要手动将值添加到将要为其他记录重复的字段,您只需从相关的主键表中选择。如果您尝试在另一个表中输入不存在的主键作为主键,您将被拒绝(但在某些数据库中,您可以调整此行为)。
第二个意思是不用每次都写“United States of America”,这比写“United States of America”的ID要占用更多的空间。
【讨论】:
目前,实际上越来越远离基于外键的关系数据库。诸如 MongoDB 之类的文档数据库系统正变得越来越流行。这主要是因为世界正变得更加分布在云中。
这意味着假设即时数据一致性有时是不合理或不可行的。
如果您有兴趣,请阅读基于 NoSQL 的数据库、MongoDB CouchDB 和最终一致性。
对于我们受过关系训练的头脑来说,这有点奇怪,但许多大型 Web 解决方案需要牺牲一致性以实现可用性或分区容错。
【讨论】:
是的,您应该这样做。外键只是帮助您建立关系并确保您的数据库中有正确信息的约束。您应该使用它们来防止任何错误的数据输入。
【讨论】:
是的。但处于中等水平。这在您查询数据时很有帮助。它有助于索引您的数据,因此查询速度更快。它还有助于维护实体之间的关系。
【讨论】: