sql - 外键与辅助键

标签 sql

我曾经认为外键和辅助键是同一个东西。

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

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

最佳答案

wiki/Foreign_key中的定义指出:

In the context of relational databases, a foreign key is a field (or collection of fields) in one table that uniquely identifies a row of another table. In other words, a foreign key is a column or a combination of columns that is used to establish and enforce a link between two tables.

The table containing the foreign key is called the referencing or child table, and the table containing the candidate key is called the referenced or parent table.

举个例子:

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

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

插入“客户”行后,在“订单”表中设置 FK 的值时,父表(“客户”表)和子表(“订单”表)之间建立的关系就会建立。此外,删除子行可能会影响父行,具体取决于创建 FK 时建立的引用完整性规则(级联规则)。 FK 有助于建立关系数据库系统的完整性。

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

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

关于sql - 外键与辅助键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20668291/

相关文章:

mysql - 如何将连接查询的两行输出合并为一行?

sql - WITH AS (SELECT) 语句的 CREATE VIEW 语法

sql server 分组结果

C# SQL 语句 - 查询中的语法错误。不完整的查询子句

mysql - 条件连接以确定连接表

sql 查询结果到 databricks 笔记本中的 pandas df

mysql - B+树的聚簇索引和非聚簇索引保存在哪里?

mysql - PHP 代码中的 SQL 语法错误 - 将两个值相加

SQL:从这样的数据中获取周期开始和结束日期时间?我正在努力解决的棘手的小难题

php - 管理连接表的最佳方法