外键可以是非密钥吗?

时间:2017-03-06 16:08:29

标签: mysql sql

假设表B依赖于表A.

表B具有唯一的主键B.B_ID和外键B.A_ID

引用父表A的主键。

由于B有唯一的密钥,是B.A_ID,外键,非密钥(非密钥)

在B?

谢谢。

3 个答案:

答案 0 :(得分:2)

在讨论第二范式时,"非关键列"是所有不属于候选键的列。

表格中肯定有外键列不属于该表的主键。

假设您有一个包含主键Person的表PersonName,因为这是您用来唯一标识每个人的列。

您还可以在该表中添加一列,例如CountryOfCitizenship,它是引用另一个表Country的外键。此外键列不是Person表中主键的一部分;这不是我们识别该表中每一行的方式。

重新评论:

第二种常规形式要求非键列对整个主键具有功能依赖性。仅当主键有多列时,这与第一范式不同。

功能依赖性意味着属性列明确地与主键相关,因此属性列中的值属于与该主键相同的行。

因此,如果像CountryOfCitizenship这样的列始终包含国家/地区名称,该国家/地区名称是在同一行的主键中命名的人员的公民身份国家/地区,那么该属性就会满足1NF有一个单列主键,它也会自动在2NF中。

答案 1 :(得分:1)

在MySQL术语中,“key”通常是指一个显式键,其上有一个索引。如果使用此定义,则主键是键。一把钥匙是一把钥匙。而索引键是关键。但是外键不一定是关键。

当您声明外键约束时,MySQL不一定在引用表上构建索引(它在innodb中)。当然,您可以声明外键也是一个键,并保证构建索引。

答案 2 :(得分:0)

  

FOREIGN KEY约束不必仅链接到另一个表中的PRIMARY KEY约束;它也可以定义为引用另一个表中UNIQUE约束的列。

您可以在https://stackoverflow.com/a/18435114/7667467

找到更多信息