外键是否需要引用主键或候选键?

时间:2016-10-28 07:16:36

标签: database foreign-keys primary-key

我对外键有两个相互矛盾的定义。

来自Wikipedia

the foreign key is defined in a second table, but it refers to the primary key in the first table.

从我的讲义中:

Foreign key does not have to match a primary key but must match a candidate key in some relation

哪个是哪个?外键是否需要引用主键或候选键?

5 个答案:

答案 0 :(得分:3)

旧版本的SQL标准强加了FK必须引用“主”密钥的规则。这个规则现在已经放宽了(现在允许FK引用任何候选键),但可能是某些产品仍然遵循旧规则的情况,就像某些教科书或其他来源尚未更新以反映新的事态。

我不确切地知道规则在标准中放宽时,但是它必须不迟于2003年。

答案 1 :(得分:3)

在数据的关系模型中,外键必须引用候选键。

在几乎所有SQL dbms中,外键都必须引用候选键。

在MySQL中,a foreign key can reference just about anything

  

此外,MySQL要求出于性能原因对引用的列进行索引。但是,系统不会强制要求引用的列为UNIQUE或声明为NOT NULL

强调补充。

这是一件坏事,恕我直言。

答案 2 :(得分:1)

外键必须引用唯一键(主键是唯一的),因为如果它不是,它可以是2行的引用,而外键是不可能的。然后,您可以拥有主键,但是一个不是主键并在其上执行外键的唯一键。您的唯一密钥必须为NOT NULL

答案 3 :(得分:1)

外键必须链接到候选键,因为如果表之间的连接是使用外键进行的,则链接到非候选键的属性的FK可能导致检索多个值,其中只应检索一个值

答案 4 :(得分:0)

实际上,外键与另一个表的主键标签无关,如果它指向另一个表的唯一列(不一定是主键),那么它也将是外键。因此,外键的正确定义是: 外键是一个表的列,指向另一个表的候选键