我查看了This post,但我并不真正理解所使用的术语(非平凡函数依赖,超级密钥)
从我所读到的第二个正常形式似乎与复合键有关,而第三个正常形式与主键有关。
我不确定这是否正确。
所以第二种常规形式 - 有一个复合键,表中的所有字段都必须与两个复合键字段相关。如果某些内容不相关,则应将其重构为另一个表。
第三种正常形式 - 一切都必须依赖于主键 - 所以我猜测在第3范式中只有1个键而不是第2个普通形式可以有复合键?
任何建议表示赞赏
集合的适当子集或超集是不等于它的集合。
我们说一组列S在功能上确定了表中的另一个集合T,当第一个的每个子行总是出现时,第二个的子行相同。我们写S - > T并且说S是行列式集合而T是确定的集合。我们称S - > T为FD(函数依赖)。当S是T的超集时,我们说它是一个微不足道的FD。当S是{A}时我们说A - > T&当T是{A}时我们说S - > A.
超级键是一组唯一标识行的列。当它在功能上确定每个属性时就是如此。 CK(候选键)是不包含正确超级键的超级键。我们可以选择CK作为PK(主键)。在某个CK中,列是素数。
这足以理解您链接到的答案:
2NF和3NF之间的差异就是这个。假设某些关系满足形式A-> B的非平凡函数依赖性,其中B是非优质属性。
如果A不是超级密钥但是候选密钥的适当子集,则违反2NF
如果A不是超级密钥,则违反3NF
引用说如果“存在这样的FD,则会违反NF”。如果存在这样的FD,它也只会被违反。
当S的适当子集也在功能上确定T时,FD S - > T是部分的;否则就满了。请注意,这不涉及CK。当每个非素数列在功能上完全依赖于每个CK时,表在2NF中。
当存在X时,S - > T是传递的,其中S - > X和X - > T而不是X - > S.注意,这不涉及CK。当每个非素数列非传递性地依赖于每个CK时,表在3NF中。
(注意2NF和3NF的替代定义与报价不同。)