已知条件

  • 属性集:U = {A1, A2, A3, A4}

  • 函数依赖集:F = {A1→A2, A1→A3, A2→A4}

先找候选码(问题 52)

技巧:看谁在 F 的右边没出现过

  • A1:只在左边出现 → L 类属性(铁定入码)

  • A2:左右都出现 → LR 类

  • A3:只在右边出现 → R 类(不可能入码)

  • A4:只在右边出现 → R 类(不可能入码)

算 A1 的闭包(A1 能推出哪些属性):

  1. A1 → A1(自己)

  2. A1 → A2(F 中有)

  3. A1 → A3(F 中有)

  4. A1 → A2 → A4(传递,因为 A2→A4)

所以 A1⁺ = {A1, A2, A3, A4} = U

结论:候选码就是 A1(唯一候选码)。

核心知识点:Armstrong 公理系统

这是数据库理论的推导引擎,所有函数依赖的推导都靠它。

三大基本公理

表格

公理

名称

形式

人话

A1

自反律

若 Y⊆X,则 X→Y

子集当然被决定(如 AB→A)

A2

增广律

若 X→Y,则 XZ→YZ

两边同时加条件,结论不变

A3

传递律

若 X→Y 且 Y→Z,则 X→Z

跟数学传递性一样

三大常用推论(由基本公理推出)

表格

推论

名称

形式

人话

合并

合并规则

X→Y 且 X→Z,则 X→YZ

一个 X 能决定多个属性,就能决定它们的组合

分解

分解规则

X→YZ,则 X→Y 且 X→Z

能决定整体,就能决定部分

伪传递

伪传递

X→Y 且 WY→Z,则 XW→Z

中间接龙


什么是"F 所蕴涵"?

定义:如果函数依赖 X→Y 能仅通过 Armstrong 公理从 F 推导出来,就说 F 蕴涵 X→Y

判断方法

  1. 算 X 的闭包 X⁺(从 X 出发,用 F 能推出的所有属性集合)

  2. 如果 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 类

只在 F 左边出现

必须在候选码中

R 类

只在 F 右边出现

绝不在候选码中

N 类

左右都没出现

必须在候选码中

LR 类

左右都出现

可能入码,需试算

步骤

  1. 找出所有 L 类和 N 类属性,组成集合 X

  2. 算 X⁺,如果等于 U,则 X 是唯一候选码

  3. 如果不够,从 LR 类属性中逐个加入,直到闭包等于 U


记忆口诀

  • L 入 R 出 N 必入,LR 待定算闭包

  • 蕴涵不神秘,闭包算到底

  • 增广别害怕,加条件是废话:X→Y 成立,XZ→Y 一定成立(两边加 Z,右边 Y 是 YZ 的子集,再分解即可)