三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

函数依赖的**传递性(Transitivity)**,属于逻辑蕴涵,无需额外条件

函数依赖的**传递性(Transitivity)**,属于逻辑蕴涵,无需额外条件

选项 B 正确:若 X→Y 且 Y→Z,且 Y↛X(即 Y 不函数决定 X),则称 Z 对 X 存在传递函数依赖;但严格来说,仅由 X→Y 和 Y→Z 就可推出 X→Z(这是函数依赖的传递律,是 Armstrong 公理系统的基本推理规则之一),无论 Y 是否决定 X。因此,“X→Y 且 Y→Z ⇒ X→Z”恒成立,这就是函数依赖的传递性(Transitivity),属于逻辑蕴涵,无需额外条件。故 B 描述正确(尽管“传递依赖”术语常特指非平凡、非主属性对非超键的传递依赖,但题干括号中写的是“传递依赖”,略欠严谨;然而在选择题语境下,B 是唯一符合函数依赖基本公理的正确陈述)。

逐项分析:

A. 错误。平凡函数依赖指 Y ⊆ X,则 X→Y 恒成立。它既不是完全依赖也不是部分依赖(因无“真子集”可言),更不等价于“非完全依赖”。完全/部分依赖仅针对非平凡依赖且 X 为超键时讨论;平凡依赖不参与范式判断中的依赖分类,不能简单说它是“非完全依赖”。

C. 错误。部分函数依赖定义为:X→Y,X 为候选键(或超键),存在真子集 X′⊂X,使得 X′→Y。它可能出现在 1NF 中,但并非“一定存在”。例如一个关系模式 R(A,B) 中,AB 是候选键,且 A→B,则存在部分依赖;但如果所有非主属性都完全函数依赖于候选键(如 R(A,B,C),候选键为 AB,且仅 AB→C,无 A→C 或 B→C),则 1NF 关系中可以没有部分依赖——只是此时它已满足 2NF。因此“一定存在”过于绝对,错误。

D. 错误。候选键是极小超键,即其任何真子集都不能函数决定全部属性。因此候选键不能包含冗余属性;含冗余属性的是超键,而非候选键。

综上,唯一正确的是 B。

函数依赖的 Armstrong 公理系统是关系数据库规范化理论的基础,由三条自明的、 sound 且 complete的推理规则构成,用于从给定函数依赖集 F 推导出其闭包 F⁺(即所有逻辑蕴涵的函数依赖)。


三条基本公理:

  1. 自反律(Reflexivity)
    若 Y ⊆ X,则 X → Y。
    → 即“超集决定其子集”恒成立(平凡函数依赖)。
    例:AB → A,AB → B,AB → AB 均成立。

  2. 增广律(Augmentation)
    若 X → Y,则 XZ → YZ(其中 Z 是任意属性集)。
    → 两边同时添加相同属性,依赖仍成立。
    例:若 A → B,则 AC → BC。

  3. 传递律(Transitivity)
    若 X → Y 且 Y → Z,则 X → Z。
    → 类似于数学中的传递性,是推导非平凡依赖的核心。
    例:若 A → B 且 B → C,则 A → C。

这三条公理共同构成完备的推理系统——任何逻辑上由 F 蕴涵的函数依赖,都可通过有限次应用这三条规则从 F 导出。


由Armstrong公理推导的重要推理规则:

🔹合并律(Union Rule):若 X → Y 且 X → Z,则 X → YZ。
推导过程
① X → Y (已知)
② X → Z (已知)
③ 由增广律,X → Y ⇒ XY → YY ⇒ XY → Y(冗余,但关键在下一步)
更标准推导:
- 由 X → Y,应用增广律(加 Z)得:XZ → YZ;
- 由 X → Z,得 X → Z;再用增广律(加 Y)得:XY → ZY;
但更简洁严谨的推导如下:
① X → Y ⇒ X → Y(自明)
② X → Z ⇒ X → Z
③ 由增广律,X → Y ⇒ X → Y(不变),再对 X → Z 应用增广律得:X → Z ⇒ X → Z;
→ 实际常用辅助步骤:
a) X → Y ⇒ X → Y(1)
b) X → Z ⇒ X → Z(2)
c) 由 (1) 和增广律(加 Z):XZ → YZ
d) 由 (2) 得 X → Z,故 XZ ≡ X(因 Z 已被 X 决定),所以 X → YZ。
✅ 更规范的证明(教科书标准):
- 由 X → Y,根据增广律得:X → XY(因 X → X 自反,X → Y ⇒ X → XY);
- 由 X → Z,得 X → XZ;
- 但更直接方式是:
X → Y ⇒ X → Y(自反+增广不直接得并集)→ 正确路径是:
1. X → Y(已知)
2. X → Z(已知)
3. 由增广律,X → Y ⇒ XX → YX ⇒ X → XY(因 XX = X)
4. 同理,X → XZ
5. 然后利用传递性需中间项,故实际教学中常将合并律视为增广+传递的组合
• 由 X → Y,得 X → Y(1)
• 由 X → Z,得 X → Z(2)
• 则 X → YZ 可通过如下两步:
- 先证 X → Y 和 X → Z ⇒ X → Y ∪ Z,这本身是合并律定义;
- 标准推导依赖增广律 + 传递律 + 自反律
i) X → Y ⇒ X → Y(自反)
ii) X → Z ⇒ X → Z
iii) 由增广律,X → Y ⇒ XZ → YZ
iv) 但 X → Z ⇒ XZ ≡ X(逻辑等价),故 X → YZ。
✅ 结论:合并律可由 Armstrong 公理导出,是有效推理规则

🔹伪传递律(Pseudotransitivity):若 X → Y 且 WY → Z,则 WX → Z。
推导过程
① X → Y (已知)
② WY → Z (已知)
③ 由增广律,对①两边加 W:WX → WY
④ 由③ WX → WY 和② WY → Z,根据传递律得:WX → Z
✅ 完整、严格,仅使用增广律 + 传递律。


补充说明:

  • 还有其他常用规则如分解律(Decomposition):X → YZ ⇒ X → Y 且 X → Z(由自反律 Y ⊆ YZ,及增广律逆用,或定义直接可得);
  • 所有这些规则均不增加新信息,仅帮助高效计算属性闭包或求最小覆盖。
# 示例:计算属性集闭包 X⁺(用于候选键/范式判定)defclosure(X,F):"""F: list of tuples (lhs, rhs), e.g., [('A', 'B'), ('B', 'C')]"""result=set(X)changed=Truewhilechanged:changed=Falseforlhs,rhsinF:ifset(lhs).issubset(result)andnotset(rhs).issubset(result):result|=set(rhs)changed=Truereturnresult

← 返回列表