检查给定关系中违反 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)。

更新于:2021年7月6日

5K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告