檢查給定關係中違反 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)。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP