假设表B依赖于表A.
表B具有唯一的主键B.B_ID和外键B.A_ID
引用父表A的主键。
由于B有唯一的密钥,是B.A_ID,外键,非密钥(非密钥)
在B?
谢谢。
答案 0 :(得分:2)
在讨论第二范式时,"非关键列"是所有不属于候选键的列。
表格中肯定有外键列不属于该表的主键。
假设您有一个包含主键Person
的表PersonName
,因为这是您用来唯一标识每个人的列。
您还可以在该表中添加一列,例如CountryOfCitizenship
,它是引用另一个表Country
的外键。此外键列不是Person
表中主键的一部分;这不是我们识别该表中每一行的方式。
重新评论:
第二种常规形式要求非键列对整个主键具有功能依赖性。仅当主键有多列时,这与第一范式不同。
功能依赖性意味着属性列明确地与主键相关,因此属性列中的值属于与该主键相同的行。
因此,如果像CountryOfCitizenship
这样的列始终包含国家/地区名称,该国家/地区名称是在同一行的主键中命名的人员的公民身份国家/地区,那么该属性就会满足1NF有一个单列主键,它也会自动在2NF中。
答案 1 :(得分:1)
在MySQL术语中,“key”通常是指一个显式键,其上有一个索引。如果使用此定义,则主键是键。一把钥匙是一把钥匙。而索引键是关键。但是外键不一定是关键。
当您声明外键约束时,MySQL不一定在引用表上构建索引(它在innodb中)。当然,您可以声明外键也是一个键,并保证构建索引。
答案 2 :(得分:0)
找到更多信息FOREIGN KEY约束不必仅链接到另一个表中的PRIMARY KEY约束;它也可以定义为引用另一个表中UNIQUE约束的列。