2012-01-06 249 views
6

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

+0

可能重复[外键真的有必要在数据库设计?(http://stackoverflow.com /问题/ 18717 /是,外国键,真的,有必要-IN-A-数据库设计) – cHao 2012-01-06 07:31:34

回答

6

“所有相关表格”并不总是清晰的,所以它不是一个明显的情况。可以有表格有一个共同的列,但可能永远不会看到对方。

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

如果你有适当的索引,它们不会帮助提高查询的效率,而且一个好的应用程序会过滤足够的输入以避免它们被需要。但是错误会发生,而且这是一种廉价的防线。

如果您只是习惯于设计数据库,那么一旦拥有基本的父母/子女关系后,他们不会花费大量时间担心和精细细节。

下面是一些background--

What's wrong with foreign keys?

4

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

6

您应该。有三个要点:

  • 根据您的数据库系统中,你可以得到更好的性能
  • 外键确保数据的完整性,例如可以帮助避免孤立记录等
  • 他们一个明确的方式来记录你的数据库结构,它可以通过工具进行可视化使用,代码生成等
6

是。但在中等水平。这有助于查询数据。它有助于索引数据,因此查询速度更快。它也有助于维护实体之间的关系。

5

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

  1. 确保数据的有效性和完整性
  2. 节省大量的额外空间

第一个手动装置,而不是增加一个值,会到现场对于其他记录,您只需从您在相关主键表中选择的记录中重复。如果您尝试在另一个表中输入一些不存在的主键,则会被拒绝(在某些数据库中,您可以调整此行为)。

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

1

目前实际上越来越远离基于外键的关系数据库。像MongoDB这样的文档数据库系统变得越来越流行。这主要是因为这个世界正随着云变得更加分散。

这意味着有时不合理或高效地假设立即数据一致性。

如果您有兴趣,请阅读基于NoSQL的数据库,MongoDB CouchDB和容量平衡。

它有点为我们的关系训练有素的头脑,了解一个奇怪的事情,但很多大型的网络解决方案