分解方法
如何把关系分解到 BCNF?
- 定位: 找到一个违反 BCNF 的非平凡函数依赖 ;
- 分裂: 把 建成一个新的关系表, 原关系表保留 的属性;
- 递归: 对新建立的关系表继续做同样的检查与分裂;
- 停止: 所有关系表都不再含违反 BCNF 的非平凡依赖;
- 代价: 逐步分裂可能丢失原有依赖, 见 范式概览;
如何按多值依赖分解?
- 定位: 找到一个违反第四范式的非平凡多值依赖 ;
- 分裂一: 把属性组 与 建成一个关系表;
- 分裂二: 把不属于 与 的属性建成另一个关系表;
- 递归: 对新建立的关系表继续按同样规则分解;
分解时怎样保证不丢信息?
- 原则: 分解后的关系表可以通过连接还原出原关系;
- 手段: 每次分裂都保留连接属性组 , 使两侧能重新连接;
- 检查: 用多值依赖的定义验证还原结果, 见 多值依赖;
(source: 020-关系数据库设计理论.md §关系数据库模式设计/§分解方法)