我看过This post,但我并不真正理解使用的术语(非平凡的函数依赖关系,超级键)
据我所知,第二范式似乎与复合键有关,而第三范式则与主键有关。
但我不确定这是否正确。
所以第二种范式--有一个复合键,表中的所有字段都必须与两个复合键字段相关联。如果有些东西不相关,那么应该将其重构到另一个表中。
第三范式--一切都必须依赖主键--所以我猜想在第三范式中只有一个键,而不是第二个法线形式,那里可以有复合键?
任何建议都很感激。
发布于 2014-12-16 12:41:24
我们编写S -> T,并说一组列S功能地确定表值中的另一列T. S -> T,当第一列的每个子行总是以第二子行的相同子行出现时。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存在时,它才会被违反。
一个FD S -> T是部分的,当S的一个适当子集也在功能上决定T时,否则它是满的。请注意,这不涉及CKs。当每个非素列都完全依赖于每个CK时,表就在2NF中。
当存在X时,S -> T是传递的,其中S -> X和X -> T而不是X -> S而不是X=T。当每个非素列都非传递依赖于每个CK时,表就在3NF中。
(请注意与引号不同的2NF和3NF的替代定义。)
https://stackoverflow.com/questions/27474203
复制相似问题