检查给定关系中违反 3NF 的哪个 FD,并将 R 分解为 3NF(DBMS)
当一个关系满足 2NF,并且不存在传递依赖时,该关系就满足 3NF;或者说,当一个关系满足 2NF,并且所有非键属性都直接依赖于候选键时,该关系就满足 3NF。
第三范式 (3NF) 是数据库规范化的第三步,它建立在第一范式 (1NF) 和第二范式 (2NF) 的基础之上。
3NF 规定,应该移除所有在被引用数据中不依赖于主键的列引用。换句话说,只有外键列应该用于引用另一个表,而父表中的其他列不应该存在于被引用表中。
问题
对于给定的关系 R(ABCDE) 和 F:{A→C,B→DE,D→C},检查哪个 FD 违反了 3NF,并将 R 分解为 3NF。
解答
给定 F:{A→C,B→DE,D→C}
A+= AC => A 不是候选键
B+= BDEC => B 不是候选键
D+= DC => D 不是候选键
AB+=ACBDE => AB 是候选键
=> 键属性 = A, B,非键属性 = C, D, E。
A→C 违反 3NF [因为 A→C 是传递依赖]
B→DE 违反 3NF [因为 B→DE 是传递依赖]
D→C 违反 3NF [因为 D→C 是传递依赖]。
3NF 分解如下:
我们考虑违反 3NF 的 FD:
对于 A→C,R(ABCDE) 分解为 R1(AC) 和 R2(ABDE)。
对于 B→DE,R2(ABDE) 分解为 R3(BDEC) 和 R4(AB)。
对于 D→C,R3(BDEC) 分解为 R5(DC) 和 R6(BDE)。
=> 关系 R 的 3NF 分解是 R1(AC), R4(AB), R5(DC), R6(BDE)。
广告