Armstrong 公理
函数依赖的Armstrong 公理系统(Armstrong's Axioms)
① 三条基本公理 (谐音记忆: 自增传Zhuan)
- 自反律(Reflexivity) 若Y⊆X⊆U,则X→Y为F所蕴含;
- 增广律(Augmentation) 若X→Y为F所蕴含,且Z⊆U,则XZ→YZ为F所蕴含;
- 传递律(Transitivity) 若X→Y,Y→Z为F所蕴含,则X→Z为F所蕴含。
② 常用推论(由三条基本公理导出)
-
合并律(Union / Composition) 若X→Y,X→Z,则X→YZ为F所蕴含;
-
分解律(Decomposition / Projectivity)
X 可以推出一个大集合Y,那么X一定能推出Y中的小集合或者单个元素(X→AB,则X→A,X→B) 若X→Y,Z⊆Y,则X→Z为F所蕴含。
-
伪传递律(Pseudo-Transitivity) 若X→Y,WY→Z,则XW→Z为F所蕴含;
③ 用途
- 判断一个函数依赖是否能由已知依赖推出。
- 计算属性闭包(Closure)。
- 判断候选键、超键。
- 数据库规范化(2NF、3NF、BCNF)。
📖 总结口诀
- 自反律:大包小必然成立。
- 增广律:左右同加仍然真。
- 传递律:$X \to Y, Y \to Z \Rightarrow X \to Z$。
- 合并律:依赖可以并到一起。
- 分解律:依赖可以拆开单个。
- 伪传递律:加个 $W$ 也能传。
求闭包题型
给定关系模式R(U,F),U={A,B,C,D},函数依赖集F={AB->C,CD->B)。关系模式R ( C ) ,主属性和非主属性的个数分别为 ( A ) 。
A.只有1个候选关键字ACB
B.只有1个候选关键字 BCD
C.有2个候选关键字ABD和ACD
D.有2个候选关键字ACB和BCD
A.4和0 B.3和1 C.2和2 D.1和3
解析:
U={A,B,C,D}, 并且由函数依赖集F得知,CB可以被推导出,AB不能被导出
所以A和B一定在候选关键字中。
开始求闭包
(A)+ = A 不等于U,所以得不到U
(AB)+ = ABC,仍然得不到U
(ABD)+ = ABCD=U,所以ABD是候选关键字,个数为3
同理ACD也可以得到U,所以ACD也是候选关键字,个数为3
① 求候选码
1. 看依赖
- AB → C
- CD → B
2. 尝试闭包
- AB⁺ = {A, B, C},缺 D → 不是候选码
- AB D⁺ = {A, B, C, D} = U → 候选码
- AC⁺ = {A, C},缺 B,D → 不行
- AD⁺ = {A, D}
- AD → (无直接依赖)
- 但 AD 和 C 没关系,缺 B,C → 不行
- CD⁺ = {C, D, B},缺 A → 不是候选码
- A C D⁺ = {A, C, D, B} = U → 候选码
👉 候选码有:ABD、ACD
② 主属性 / 非主属性
- 主属性:出现在任一候选码中的属性
- 候选码 = {A,B,D}, {A,C,D}
- 主属性 = {A, B, C, D}(全部)
- 非主属性:U – 主属性 = ∅
- 个数 = 0
③ 范式判断
- 先看 1NF:默认成立
- 2NF:要求每个非主属性完全依赖于码
- 这里没有非主属性(全是主属性)
- → 满足 2NF
- 3NF:要求每个非主属性不传递依赖于码
- 还是没有非主属性
- → 满足 3NF
- BCNF:要求每个函数依赖的左边是超码
- 看 AB → C:AB 不是超码(加 D 才是) → 违背 BCNF
👉 所以 R 在 3NF,但不是 BCNF。
✅ 最终答案
- (53) → 3NF
- (54) → 主属性 4 个,非主属性 0 个