正常形式 - 第二对第三 - 只是复合键的区别?非平凡的依赖?

时间:2014-12-14 21:15:44

标签: database database-normalization 3nf

我查看了This post,但我并不理解使用的术语(非平凡的函数依赖,超级密钥)

从我读过的内容看,第二范式似乎与复合键有关,而第三范式则与主键有关。

我不确定这是否正确。

所以第二个普通形式 - 有一个复合键,表中的所有字段必须与两个复合键字段相关。如果某些内容不相关,则应将其重构为另一个表。

第3范式 - 一切都必须依赖于主键 - 所以我猜测在第3范式中只有1个键,而不是第2个普通形式可以有复合键?

任何建议表示赞赏。

1 个答案:

答案 0 :(得分:2)

集合的正确子集或超集是与它不相等的集合。

我们说一组列S在功能上确定了表中的另一个集合T,当第一个的每个子行总是出现时,第二个的子行相同。我们写S - > T并且假设S是行列式集合而T是确定的集合。我们称之为S - > FD(功能依赖)。当S是T的超集时,我们说它是一个微不足道的FD。当S是{A}时,我们说A - >; T&当T是{A}时,我们说S - >甲

超级键是一组唯一标识行的列。当它在功能上确定每个属性时就是如此。 CK(候选键)是不包含正确超级键的超级键。我们可以选择CK作为PK(主键)。当某个列位于某个CK时,该列是素数。

足以理解您链接到的答案:

  

2NF和3NF之间的差异就是这个。假设有一些关系   满足形式A-> B的非平凡函数依赖,其中   B是非主要属性。

     如果A不是超级密钥但是a的适当子集,则违反了<2> 2NF   候选人密钥

     如果A不是超级密钥,

违反了3NF

引用说如果&#34;违反了NF&#34;这样的FD存在。如果存在这样的FD,它也只会违反

FD S - &gt;当S的适当子集在功能上确定T时,T是部分的;否则就满了。请注意,这不涉及CK。当每个非素数列在功能上完全依赖于每个CK时,表格在2NF中。

S - &gt;当存在X时,T是可传递的,其中S - > X和X - &gt; T而不是X - &gt; S.请注意,这不涉及CK。当每个非素数列非传递性地依赖于每个CK时,表格在3NF中。

(注意2NF和3NF的替代定义与报价不同。)