假设表B依赖于表A。
表B具有唯一的主键B.B_ID和外键B.A_ID
它引用了父表A的主键。
因为B有一个唯一的键,就是B.A_ID,外键,一个非键(非键)
在B区?
谢谢。
发布于 2017-03-07 00:34:27
在讨论第二范式的上下文中,“非键列”是不属于候选键的所有列。
表中的外键列当然可能不是该表的主键的一部分。
假设您有一个具有主键PersonName的表Person,因为这是用于唯一标识每个person的列。
您还可以在该表中有一个引用另一个表Country的外键,比如CountryOfCitizenship。这个外键列不是Person表中主键的一部分;它不是我们标识该表中每一行的方式。
请回复您的评论:
第二种范式要求非键列对整个主键具有函数依赖关系。只有当您的主键有多列时,这才不同于第一范式。
函数依赖意味着属性列明确地与主键相关,因此属性列中的值与主键属于同一行。
因此,如果像CountryOfCitizenship这样的列总是包含国家名称,即在同一行的主键中指定的人的国籍国家,那么该属性满足1NF,并且由于表有一个单列主键,因此它也自动包含在2NF中。
发布于 2017-03-07 00:11:34
在MySQL术语中,“键”通常指的是具有索引的显式键。如果使用此定义,则主键就是键。唯一的密钥就是密钥。索引键就是键。但是外键不一定是键。
当您声明外键约束时,MySQL不一定会在引用表上构建索引(它在innodb中是这样做的)。当然,您可以声明外键也是一个键,并保证建立索引。
发布于 2017-03-07 00:11:25
外键约束不必仅链接到另一个表中的主键约束;还可以将其定义为引用另一个表中唯一约束的列。
你可以在这里找到更多信息https://stackoverflow.com/a/18435114/7667467
https://stackoverflow.com/questions/42630283
复制相似问题