首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >外键可以是非键吗?

问外键可以是非键吗?
EN

Stack Overflow用户
提问于 2017-03-07 00:08:29
回答 3查看 2.2K关注 0票数 0

假设表B依赖于表A。

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

它引用了父表A的主键。

因为B有一个唯一的键,就是B.A_ID,外键,一个非键(非键)

在B区?

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2017-03-07 00:34:27

在讨论第二范式的上下文中,“非键列”是不属于候选键的所有列。

表中的外键列当然可能不是该表的主键的一部分。

假设您有一个具有主键PersonName的表Person,因为这是用于唯一标识每个person的列。

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

请回复您的评论:

第二种范式要求非键列对整个主键具有函数依赖关系。只有当您的主键有多列时,这才不同于第一范式。

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

因此,如果像CountryOfCitizenship这样的列总是包含国家名称,即在同一行的主键中指定的人的国籍国家,那么该属性满足1NF,并且由于表有一个单列主键,因此它也自动包含在2NF中。

票数 2
EN

Stack Overflow用户

发布于 2017-03-07 00:11:34

在MySQL术语中,“键”通常指的是具有索引的显式键。如果使用此定义,则主键就是键。唯一的密钥就是密钥。索引键就是键。但是外键不一定是键。

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

票数 1
EN

Stack Overflow用户

发布于 2017-03-07 00:11:25

外键约束不必仅链接到另一个表中的主键约束;还可以将其定义为引用另一个表中唯一约束的列。

你可以在这里找到更多信息https://stackoverflow.com/a/18435114/7667467

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42630283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档