2

我看过这篇文章,但我并不真正理解使用的术语(非平凡的函数依赖,超级键)

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

我不确定这是否正确。

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

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

任何建议表示赞赏。

4

1 回答 1

2

我们写 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 时才会违反它。

当 S 的一个真子集也在函数上确定 T 时,FD S -> T 是部分的;否则它是满的。请注意,这不涉及 CK。当每个非素数列在功能上完全依赖于每个 CK 时,表处于 2NF。

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

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

于 2014-12-16T12:41:24.777 回答