外键与辅助键

时间:2013-12-18 21:00:57

标签: sql

我以前认为外键和二键是一样的。

在谷歌搜索后,结果更加令人困惑,有些人认为它们是相同的,其他人则认为辅助密钥是一个不必唯一的索引,并且允许比使用主键更快地访问数据。

有人可以解释一下这个区别吗? 或者确实是混合术语的情况? 每个数据库类型可能有所不同吗?

3 个答案:

答案 0 :(得分:9)

wiki/Foreign_key中的定义指出:

  

在关系数据库的上下文中,外键是一个字段(或   一个表中唯一标识一行的字段集合   另一张桌子。换句话说,外键是列或a   用于建立和实施链接的列组合   在两张桌子之间。

     

包含外键的表称为引用或   子表,包含候选键的表称为   引用或父表。

以案例为例:

客户可以下1个或更多订单。

从业务角度来看,每个客户都由一个唯一的ID(主键)标识,而不是每个订单重复客户信息,我们放置一个引用或指向该唯一客户ID的指针(客户的主键) )在订单表中。通过查看任何订单,我们可以告诉谁使用唯一的客户ID放置它。

在插入Customer行后,在Order表中设置FK的值时,将建立父(Customer表)和子表(Order表)之间建立的关系。此外,删除子行可能会影响父级,具体取决于创建FK时建立的参照完整性标记(级联规则)。 FK有助于在关系数据库系统中建立完整性。

对于“辅助密钥”,该术语指的是一个或多个列的结构,它们一起帮助检索同一个表的一行或多行。 “关键”这个词对某些人来说有点误导。辅助密钥不必是唯一的(与PK不同)。它不是表的主键。它用于定位在其中定义的同一个表中的行(与FK不同)。它的实施只能通过一个索引(或者是唯一的或不是唯一的)来实现是可选的。一个表可以有0,1个或更多的辅助密钥。例如,在Employee表中,您可以使用自动生成的列作为主键。或者,您可以决定使用员工编号或SSN来检索员工信息。

有时人们会将术语“辅助密钥”与术语“候选密钥”或“备用密钥”(通常出现在规范化上下文中)混合使用,但它们都是不同的。

答案 1 :(得分:3)

外键是引用某个其他表上的索引的键。例如,如果您有一个客户表,则该表中的一列可能是一个国家/地区列,其中只包含一个ID号,该ID号与单独的Country表中该国家/地区的ID相匹配。 customer表中的country列是外键。

另一方面,辅助密钥只是表中用于创建索引(用于加速查询)的不同列。外键与提高查询速度无关。

答案 2 :(得分:2)

“辅助密钥”不是我熟悉的术语。它没有出现在Database Design for Mere Mortals的索引中,我在Pro SQL Server 2012 Relational Database Design and Implementation(我的两本“goto”数据库设计书籍)中不记得它。它也没有出现在SQL for Smarties的索引中。听起来它根本不是一个真正的术语。

我一直使用“候选键”这个词。

候选键是唯一标识实体的方法。您可以在数据库系统的设计阶段识别所有候选键。在实施阶段,您将决定主键:候选键之一还是人工键。主键可能会使用主键约束来实现;候选键可能会使用唯一约束来实现。

外键是另一个实体中一个实体的候选键的实例,表示两个实体之间的关系。它可能会使用外键约束来实现。