計算各屬性集的閉包:
A⁺ = {A, B} (A→B, B→A 形成循環)
B⁺ = {B, A} (同理)
C⁺ = {C, A, B} = {A, B, C} (C→A, A→B)
AB⁺ = {A, B}
AC⁺ = {A, B, C}
BC⁺ = {A, B, C}
候選碼:{C}、{A, C}、{B, C}(最小超鍵)
主屬性:A, B, C(全部屬性都包含在某個候選碼中)
非主屬性:無
✅ 滿足:假設關系模式中所有屬性均為不可分的基本數據項。
定義:無非主屬性對候選碼的部分函數依賴。
✅ 滿足:因無非主屬性,不存在部分函數依賴問題。
(即便有部分依賴,也只能是主屬性對候選碼的部分依賴,不違反 2NF)
定義:無非主屬性對候選碼的傳遞函數依賴。
等價條件:對 F 中每個非平凡函數依賴 X → Y,滿足 X 是超鍵,或 Y 是主屬性。
檢查 F 中每個 FD:
| 函數依賴 | 左邊 X 是超鍵? | 右邊 Y 是主屬性? | 結論 |
|---|---|---|---|
| A → B | 否 (A⁺={A,B}) | 是 (B 是主屬性) | ✅ 滿足 3NF |
| B → A | 否 (B⁺={A,B}) | 是 (A 是主屬性) | ✅ 滿足 3NF |
| C → A | 是 (C 是候選碼) | 是 (A 是主屬性) | ✅ 滿足 3NF |
結論:滿足 3NF
定義:對 F 中每個非平凡函數依賴 X → Y,X 必須是超鍵。(比 3NF 更嚴格,不允許主屬性對非超鍵的依賴)
檢查:
結論:不滿足 BCNF
這是一個經典的主屬性對關鍵字部分依賴/傳遞依賴的例子:
-- 分解為兩個關系:
R1(A, B) -- F1 = {A → B, B → A} 候選碼:{A}, {B} → BCNF
R2(C, A) -- F2 = {C → A} 候選碼:{C} → BCNF
-- 自然連接 R1 ⋈ R2 可無損恢復原關系
-- 但分解後需注意:原 FD C→B 變為跨關系依賴,應用層需維護一致性
一范式:看原子性(有無多值屬性)
二范式:看非主屬性是否部分依賴候選碼(無非主屬性直接過)
三范式:看非主屬性是否傳遞依賴候選碼(或:左邊非超鍵時右邊必須是主屬性)
BCNF:看所有決定因是否為超鍵(最嚴格,主屬性也不能依賴非超鍵)