已知条件
属性集:U = {A1, A2, A3, A4}
函数依赖集:F = {A1→A2, A1→A3, A2→A4}
先找候选码(问题 52)
技巧:看谁在 F 的右边没出现过
A1:只在左边出现 → L 类属性(铁定入码)
A2:左右都出现 → LR 类
A3:只在右边出现 → R 类(不可能入码)
A4:只在右边出现 → R 类(不可能入码)
算 A1 的闭包(A1 能推出哪些属性):
A1 → A1(自己)
A1 → A2(F 中有)
A1 → A3(F 中有)
A1 → A2 → A4(传递,因为 A2→A4)
所以 A1⁺ = {A1, A2, A3, A4} = U
结论:候选码就是 A1(唯一候选码)。
核心知识点:Armstrong 公理系统
这是数据库理论的推导引擎,所有函数依赖的推导都靠它。
三大基本公理
表格
三大常用推论(由基本公理推出)
表格
什么是"F 所蕴涵"?
定义:如果函数依赖 X→Y 能仅通过 Armstrong 公理从 F 推导出来,就说 F 蕴涵 X→Y。
判断方法:
算 X 的闭包 X⁺(从 X 出发,用 F 能推出的所有属性集合)
如果 Y ⊆ X⁺,则 F 蕴涵 X→Y
用这道题验证 D 选项:
算 A2⁺:
初始:{A2}
A2→A4(F 中有),加入 A4 → {A2, A4}
再也推不出新属性了
A2⁺ = {A2, A4}
A3 ∉ A2⁺,所以 A2→A3 不被 F 蕴涵
求候选码的通用方法(L/R/N/LR 分类法)
表格
步骤:
找出所有 L 类和 N 类属性,组成集合 X
算 X⁺,如果等于 U,则 X 是唯一候选码
如果不够,从 LR 类属性中逐个加入,直到闭包等于 U
记忆口诀
L 入 R 出 N 必入,LR 待定算闭包
蕴涵不神秘,闭包算到底
增广别害怕,加条件是废话:X→Y 成立,XZ→Y 一定成立(两边加 Z,右边 Y 是 YZ 的子集,再分解即可)