哪个范式是满足函数依赖关系(DBMS)的最高范式?
让我们考虑依赖关系 F= {AB->CDEF, AF->ED, F->B},以下哪一项是表 R=ABCDEF 可以满足的最高范式。
从以下选项中选择一个 -
- 不满足任何范式。
- Boyce-Codd 范式
- 第一范式
- 第二范式
- 第三范式
给定 F 的函数依赖关系如下 -
AB ---> CDEF
AF ---> ED
F ---> B
现在在 F 的函数依赖关系的 RHS(右侧),属性 B、C、D、E、F 都存在,但属性 A 缺失。因此,属性 A 必须是超键的一部分。
我们需要找到 A 的闭包 (A+),
A+ = 仅 A,因此单独的属性 A 不能成为键。因此,我们需要将 A 与 F 的其他属性组合,然后找到 F 的候选键。
查找 F 的候选键
AB+ = ABCDEF
AC+ = AC
AD+ = AD
AE+ = AE
AF+ = AFBCDE
现在由于 (AC、AD、AE) 的闭包没有覆盖 F 的所有属性。因此,我们还需要组合 AC、AD、AE 来检查它们的组合是否成为 F 的候选键。
所以 ACD+ = ACD
ACE+ = ACE
ADE+ = ADE
ACDE+ = ACDE
因此,最终,我们确认 AB 和 AF 是 F 的唯一候选键,因为它们的闭包覆盖了 F 的所有属性。
因此,F 的主属性是 A、B、F,F 的非主属性是 C、D、E。
检查最高范式 (NF)
我们将从最高的范式开始,其中 BCNF 是最高的范式,如果 F 处于 BCNF 范式,那么它也将处于 1NF、2NF 和 3NF。
检查 BCNF
F 的所有函数依赖关系 X ---> Y,其中所有 X 必须是超键。
在 F 的所有函数依赖关系中,只有 AF 和 AB 是超键,但 F 不是超键。
(AB ---> CDE, AF ---> ED, F ---> B)
因此,F 不在 BCNF 中,因为 (X ---> Y) 的所有 X 都不是超键。
检查 3NF
对于 F 处于 3NF,不应该出现非主属性的传递函数依赖,或者说 F 中的任何非主属性都不应该导出到其他非主属性。
并且在 F (X --> Y) 中,函数依赖关系的所有 X 都是主属性,因为 AF、AB 是超键,并且 F 是主属性。因此,没有传递依赖关系的出现,因此它在 3NF 中。
并且 F 也在 2NF 中,因为没有部分依赖关系,即候选键的任何部分都不会导出到任何非主属性。
如果 F 在 3NF 中,那么它也在 2NF 和 1NF 中。因为 3NF 是其中最高的范式。
结论
表 R(A,B,C,D,E) 满足 3NF。