Armstrong 公理

函数依赖的Armstrong 公理系统(Armstrong's Axioms)

① 三条基本公理 (谐音记忆: 自增传Zhuan)

  1. 自反律(Reflexivity) 若Y⊆X⊆U,则X→Y为F所蕴含;
  2. 增广律(Augmentation) 若X→Y为F所蕴含,且Z⊆U,则XZ→YZ为F所蕴含;
  3. 传递律(Transitivity) 若X→Y,Y→Z为F所蕴含,则X→Z为F所蕴含。

② 常用推论(由三条基本公理导出)

  1. 合并律(Union / Composition) 若X→Y,X→Z,则X→YZ为F所蕴含;

  2. 分解律(Decomposition / Projectivity)

    X 可以推出一个大集合Y,那么X一定能推出Y中的小集合或者单个元素(X→AB,则X→A,X→B) 若X→Y,Z⊆Y,则X→Z为F所蕴含。

  3. 伪传递律(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 个