*2NF**:要求非主属性完全函数依赖于候选键(即不能存在**部分依赖**)

📅 2026/8/20 23:17:20
*2NF**:要求非主属性完全函数依赖于候选键(即不能存在**部分依赖**)
题目给出关系模式 $ R(A,B,C,D) $函数依赖集 $ F {A \to B,\ B \to C,\ C \to D} $。我们逐步分析范式级别候选键分析从 $ A \to BB \to CC \to D $ 可得传递闭包$ A \to^ {A,B,C,D} $即 $ A $ 能函数决定所有属性。$ A $ 是超键又因 $ A $ 是单属性且无更小的子集空集不行故$ A $ 是唯一的候选键。1NF关系模式中属性均为原子值题设默认满足✅ 满足。2NF要求非主属性完全函数依赖于候选键即不能存在部分依赖。候选键是单属性 $ A $所有函数依赖左部都是 $ A $ 或其真子集但 $ A $ 无真子集因此不可能存在部分依赖。✅ 满足 2NF。3NF要求对每个非平凡 FD $ X \to Y $要么 $ X $ 是超键要么 $ Y $ 是主属性即属于某个候选键。检查 $ B \to CB $ 不是超键$ B^ {B,C,D} \neq R $且 $ C $ 不是主属性主属性仅 $ A $违反 3NF。同理 $ C \to DC $ 非超键$ D $ 非主属性 → 违反 3NF。❌ 不满足 3NF。BCNF比 3NF 更严格要求所有非平凡 FD $ X \to Y $ 中 $ X $ 必须是超键。显然 $ B \to C、、、C \to D $ 中左部均非超键 → ❌ 不满足 BCNF。综上R 最高满足2NF答案为B。# 补充验证计算各属性闭包defclosure(X,F):resultset(X)changedTruewhilechanged:changedFalseforlhs,rhsinF:ifset(lhs).issubset(result)andnotset(rhs).issubset(result):result.update(rhs)changedTruereturnresult F[(A,B),(B,C),(C,D)]print(A ,closure(A,F))# {A,B,C,D}print(B ,closure(B,F))# {B,C,D}print(C ,closure(C,F))# {C,D}print(D ,closure(D,F))# {D}在函数依赖理论中“A→B→C→D”本身是一种非正式的链式写法用于直观表示依赖传递路径但传递依赖Transitive Dependency有严格的定义不能仅凭箭头链就断定存在传递依赖。需满足以下全部条件✅ 传递依赖的严格定义教材标准如《数据库系统概念》设关系模式 $ R $函数依赖集 $ F $若存在非平凡函数依赖 $ X \to Y $且满足$ X $不是超键即 $ X^ \neq R $或 $ X $ 不包含候选键$ Y $ 是非主属性即 $ Y $ 不属于任何候选键存在属性集 $ Z $使得- $ X \to Z $ 成立- $ Z \to Y $ 成立- $ Z \not\to X $即 $ Z $ 不函数决定 $ X $- $ Y \notin Z $且- $ Z $不是超键否则 $ Z \to Y $ 属于 BCNF 允许情形不构成传递问题。等价地更常用简洁定义针对单属性若 $ X \to Y、、、Y \to Z $ 成立且$ X $ 不是超键$ Y $ 不是超键$ Z $ 是非主属性$ X \not\to Z $ 直接成立即该依赖是“间接”的则称 $ X \to Z $ 是通过 $ Y $ 的传递依赖。 回到本例$ R(A,B,C,D)F {A \to B,\ B \to C,\ C \to D} $候选键为 $ A $故主属性 {A}非主属性 {B, C, D}。$ A \to B合法合法合法A $ 是超键 → 不是传递依赖是直接依赖。$ B \to CB $ 不是超键$ C $ 是非主属性 → 检查是否由 $ A $ 间接决定因 $ A \to B $ 且 $ B \to C $故 $ A \to C $ 成立传递闭包但 $ A \to C $不直接出现在 F 中而是通过 $ B $ 传递得到。此时对非主属性 $ C $存在- $ A \to BA $ 是超键$ B $ 非主- $ B \to CB $ 非超键$ C $ 非主- $ A \not\to C $ 在 $ F $ 中即无直接边→ 故 $ A \to C $ 是传递依赖经 $ B $ 传递。同理$ A \to D $ 也成立$ A \to B \to C \to D $但 $ A \to D $ 不直接存在且中间 $ B、、、C $ 均非超键 → 所以 $ A \to D $ 也是传递依赖经 $ B $ 和/或 $ C $。⚠️ 注意传递依赖指的是“非主属性对候选键的间接依赖”即形如候选键 $ K \to Z $其中 $ Z $ 是非主属性但该依赖不直接成立而是通过一个既非超键、又不含候选键的中间属性集推导而来。因此说“A→B→C→D 构成传递依赖”是简略表达准确应为➡️非主属性 C 和 D 对候选键 A 存在传递依赖例如 $ A \to C $ 和 $ A \to D $ 均为传递依赖违反 3NF 要求。✅ 补充说明3NF 允许传递依赖当且仅当中间项是超键如 $ K \to M、、、M \to Z $且 $ M $ 是超键此时 $ M \to Z $ 属于“左部为超键”不破坏 3NF。本例中 $ B、、、C $ 均非超键故违规。# 验证 A→C 是否为传递依赖非直接FD但闭包可得F[(A,B),(B,C),(C,D)]# A {A,B,C,D} ⇒ A→C 成立但 F 中无 A→C故为传递依赖