我真的应该使用外键吗?

时间:2012-01-06 07:20:34

标签: database

我是否应该使用每个相关表的外键或不应该使用外键? 如果我应该使用,为什么?

6 个答案:

答案 0 :(得分:8)

你应该。有三个要点:

  • 根据您的数据库系统,您可以获得更好的性能
  • 外键确保数据完整性,例如可以帮助避免孤儿记录等
  • 它们是一种记录数据库结构的明确方式,可供工具用于可视化,代码生成等。

答案 1 :(得分:7)

“所有相关表格”并不总是很清楚,因此情况并不明显。可能存在具有公共列但可能永远不会看到彼此的表。

但是,防止错误超过主要防御并允许输入的数据不易追踪是很方便的。

如果您拥有适当的索引,它们无助于提高查询效率,并且一个好的应用程序将过滤输入足以永远不需要它们的输入。但是错误发生了,它们是一种廉价的防线。

如果您对设计数据库感到满意,那么一旦您建立了基本的父/子关系,就不会花费大量时间来担心和精炼细节。

这是一些背景 -

What's wrong with foreign keys?

答案 2 :(得分:7)

使用外键是关系数据库的主要概念之一(如果不是唯一的话)。你当然应该在需要时使用外键。因为这有助于:

  1. 确保数据验证和完整性
  2. 节省大量额外空间
  3. 第一个意味着不是手动将值添加到一个字段,而该字段将重复用于您从相关主键表中选择的其他记录。如果您尝试在另一个表中输入不存在的主键,则会被拒绝(在某些数据库中,您可以调整此行为)。

    第二个意味着你不必每次都写“美利坚合众国”,这比仅仅写“美利坚合众国”的ID需要更多的空间。

答案 3 :(得分:6)

是。但在适度的水平。这有助于查询数据。它有助于索引数据,从而加快查询速度。它还有助于维护实体之间的关系。

答案 4 :(得分:5)

是的,你应该。外键只是约束,它可以帮助你建立关系,并确保你的数据库中有正确的信息。你应该使用它们来防止不正确的数据输入。

答案 5 :(得分:3)

实际上,目前正在逐渐远离基于外键的关系数据库。像MongoDB这样的文档数据库系统正变得越来越流行。这很大程度上是因为随着云的发展,世界变得越来越分散。

这意味着有时候假设立即数据一致性是不合理或不合理的。

如果您有兴趣,可以阅读基于NoSQL的数据库,MongoDB CouchDB和平均一致性。

对于我们受过关系训练的人来说,理解它有点奇怪,但很多大型网络解决方案需要牺牲可用性或分区容忍度。