高级系统架构师笔记——数据库设计基础知识(5)Armstrong公理系统、无损连接和有损连接

(5)Armstrong公理系统、无损连接和有损连接

函数依赖及其推导规则

函数依赖的推导规则属于Armstrong 公理系统,是关系数据库中推导函数依赖、分析数据依赖关系的理论基础。以下是核心规则的详细说明:

三条基本公理(Armstrong 公理)
  1. 自反律(Reflexivity Rule)

    定义 :若属性集 YXUU 是关系的所有属性集),则 XY 必然成立。

    公式YXXY

    示例 :若 X ={A ,B ,C },Y ={A ,B }(YX ),则 {A ,B ,C }→{A ,B} 成立。

  2. 增广律(Augmentation Rule)

    定义 :若 XY 成立,对任意属性集 ZU ,则 XZYZ 成立("增广" 指在依赖两边同时添加属性集 Z)。

    公式XYXZYZ

    示例 :若 {A }→{B } 成立,则 {A ,C }→{B ,C} 也成立。

  3. 传递律(Transitivity Rule)

    定义 :若 XYYZ 成立,则 XZ 成立(依赖关系可通过中间属性 Y 传递)。

    公式XYYZXZ

    示例 :若 {A }→{B } 且 {B }→{C },则 {A }→{C} 成立。

由公理推导的推论(常用规则)
  1. 合并规则(Union Rule)

    定义 :若 XYXZ 成立,则 XYZ 成立(将两个依赖的右部 "合并" 为属性组)。

    公式XYXZXYZ

    示例 :若 {A }→{B } 且 {A }→{C },则 {A }→{B ,C} 成立。

  2. 分解规则(Decomposition Rule)

    定义 :若 XYZ 成立,则 XYXZ 成立(将依赖的右部 "分解" 为单个属性)。

    公式XYZXYXZ

    示例 :若 {A }→{B ,C } 成立,则 {A }→{B } 且 {A }→{C} 成立。

  3. 伪传递规则(Pseudotransitivity Rule)

    定义 :若 XYWYZ 成立,则 WXZ 成立(传递律的扩展,左部添加属性集 W)。

    公式XYWYZWXZ

    示例 :若 {A }→{B } 且 {C ,B }→{D },则 {C ,A }→{D} 成立。

  4. 复合规则(Composition Rule)

    定义 :若 XYWZ 成立,则 XWYZ 成立(两个依赖的左部和右部分别 "复合")。

    公式XYWZXWYZ

    示例 :若 {A }→{B } 且 {C }→{D },则 {A ,C }→{B ,D} 成立。

无损连接和有损连接
定义

在关系数据库的模式分解中,无损连接有损连接是判断分解是否 "保留原数据完整性" 的核心概念,直接影响数据的可恢复性。

类型 定义 本质
无损连接(Lossless Join) 关系模式分解后,通过自然连接完全还原原关系模式,无信息丢失。 分解是 "可逆" 的,连接结果与原关系完全一致。
有损连接(Lossy Join) 关系模式分解后,自然连接的结果包含原关系中没有的元组,或丢失原元组,导致信息失真。 分解是 "不可逆" 的,连接后数据出现冗余或缺失。
示例:直观理解无损与有损
  1. 无损连接示例

设关系模式 R (A ,B ,C ),函数依赖 F ={AB},原关系数据如下:

A B C
1 2 3
4 5 6

R 分解为 R 1(A ,B ) 和 R 2(A ,C):

  • R1:
A B
1 2
4 5
  • R2:
A C
1 3
4 6

自然连接 R1⋈R2(按公共属性 A 连接):

A B C
1 2 3
4 5 6

结果与原 R 完全一致,因此是无损连接

  1. 有损连接示例

设关系模式 R (A ,B ,C),无函数依赖,原关系数据如下:

A B C
1 2 3
4 2 5

R 分解为 R 1(A ,B ) 和 R 2(B ,C):

  • R1:
A B
1 2
4 2
  • R2:
B C
2 3
2 5

自然连接 R1⋈R2(按公共属性 B 连接):

A B C
1 2 3
1 2 5
4 2 3
4 2 5

其中 (1,2,5) 和 (4,2,3) 是原 R 中没有的元组,导致数据冗余,因此是有损连接

无损连接的判定方法
  1. 分解为两个子模式的判定(最常用场景)

若关系模式 R 分解为 R 1 和 R 2,则无损连接的充要条件是:

(R 1∩R 2)→(R 1−R 2)或(R 1∩R 2)→(R 2−R1)

公共属性集能决定其中一个子模式的非公共属性

  • 示例(无损连接):

    R 1(A ,B )∩R 2(A ,C )={A },且 AB (来自 F ),因此 A →(R 1−R 2)={B},满足条件,无损。

  • 示例(有损连接):

    R 1(A ,B )∩R 2(B ,C )={B },但无函数依赖 BABC,因此不满足条件,有损。

  1. 分解为多个子模式的判定(通用算法)

使用 "无损连接判定表法",步骤如下:

  1. 构造初始表:行对应原关系的属性,列对应分解的子模式,若属性属于子模式则填 ai ,否则填 bij
  2. 按函数依赖 F 迭代修改表:若某行在依赖左部的属性全为 a ,则将右部属性也改为 a
  3. 若最终表中存在一行全为 a,则分解是无损的。

关键结论

  • 无损连接是模式分解的基本要求,否则会导致数据失真;
  • 无损连接与 "保持函数依赖" 是两个独立概念:
    • 无损连接保证 "数据可恢复";
    • 保持函数依赖保证 "依赖可推导";
    • 优秀的分解需同时满足两者(如 3NF、BCNF 的分解通常是无损的)。
相关推荐
摇滚侠4 小时前
《RocketMQ 官网》阅读笔记 RocketMQ 消息队列 MessageQueue 消息 Messagege
笔记·rocketmq
Ztt6666666664 小时前
【无标题】
经验分享·笔记·其他·百度·微信公众平台
依然范特东5 小时前
强化学习笔记4--TD算法
笔记
AOwhisky5 小时前
Linux(CentOS)系统管理入门笔记(第十五期)——文件系统与存储管理(上篇):设备识别、挂载与文件查找
linux·运维·笔记·centos·文件系统
茯苓gao6 小时前
嵌入式开发笔记:QSerialPort 完整使用指南——从基础 API 到工程实战
笔记·嵌入式硬件·qt·学习
一起努力啊~6 小时前
DataWhale组队学习笔记--llm-algo-leetcode(七)
笔记·学习·llm
丘丘用户思思澪6 小时前
AI Agent 工作模式完全指南:从执行逻辑到系统架构
人工智能·系统架构
ajassi20008 小时前
AI语音智能体开发日记(一)如何为“小智”服务器启用并调试 License 功能
笔记·ai·嵌入式·ai编程
疯狂打码的少年8 小时前
【面向对象】面向对象概述:从“按步骤做”到“找谁来做”
笔记
今夜有雨.9 小时前
C++JSON 解析器
c++·笔记·后端·学习·json