一、数据依赖
1.函数依赖(Functional Dependency, FD)
- 定义:若属性集 X 的值唯一确定属性集 Y 的值,则称 Y 函数依赖于 X,记作 X → Y。
- 完全函数依赖:Y 依赖于 X 的全部属性,而非 X 的任意子集。
- 部分函数依赖:Y 依赖于 X 的某个真子集。
- 传递函数依赖:若 X → Y,Y → Z,且 Y ↛ X,则称 Z 传递依赖于 X。
2.多值依赖(Multivalued Dependency, MVD)
- 定义:若属性集 X 的值决定属性集 Y 的多个独立值集合,则称 Y 多值依赖于 X,记作 X ↠ Y。
- 当且仅当关系模式中存在非平凡多值依赖时,需分解为更高范式。
3.连接依赖(Join Dependency)
- 关系模式可无损分解为多个子模式,并通过自然连接恢复原关系。
二、关系模式规范化理论
目的:消除数据冗余、插入/删除/更新异常
1. 范式(Normal Forms)
- 第一范式(1NF)属性不可再分(原子性),每列存储单一值。
- 第二范式(2NF)满足 1NF,且所有非主属性完全函数依赖于候选键(消除部分依赖)。
- 第三范式(3NF)满足 2NF,且非主属性不传递依赖于候选键(消除传递依赖)。
- 巴斯-科德范式(BCNF)满足 3NF,且所有函数依赖的左部均为超键(消除主属性对候选键的部分/传递依赖)。
- 第四范式(4NF)满足 BCNF,且消除非平凡多值依赖。
- 第五范式(5NF)消除连接依赖,确保关系模式无损分解为更小关系。
2. 规范化过程
- 分解方法:将低范式关系模式分解为多个高范式关系模式,确保无损连接性和依赖保持性。无损分解:分解后的关系通过自然连接能恢复原数据。
依赖保持:分解后的依赖集与原依赖集等价。 - Armstrong公理:推导函数依赖的基本规则(自反律、增广律、传递律)。
3. 候选键与闭包
- 候选键:能唯一标识元组的最小属性集。
- 闭包(X⁺):由属性集 X 通过函数依赖可推导出的所有属性集合。
- 覆盖(Cover):最小函数依赖集,与原依赖集等价但无冗余。
三、关键算法与概念
- 求候选键:通过属性闭包确定候选键。
- 最小函数依赖集:消除冗余依赖和属性。
- BCNF分解算法:通过递归分解消除非平凡函数依赖。
- 3NF合成算法:保持依赖的无损分解方法。
四、规范化的优缺点
- 优点:减少冗余、避免数据异常、提升一致性。
- 缺点:过度分解可能导致查询效率降低(需通过反规范化权衡)。
五、实际应用
- 反规范化:为优化查询性能,允许一定程度冗余。
- 设计工具:ER图、依赖图辅助分析。