# 模式分解
把一个关系模式,分解成若干个关系模式(把一张表分解成若干张表)
- 分解后做自然连接,在内容上是否与原来的表等价 分解的无损连接性
- 分解后做自然连接,在数据依赖(约束)上是否与原来的表等价 分解的保持依赖性
# 什么情况下需要分解
当关系模式不符合关系范式时,需要分解(一般是 )
分解规则:将每一个函数依赖单独组成一个关系
# 无损连接性
- 找出分解的两个表()的交集
- 判断这个交集是否为 的超码或者是 的超码,若满足,则有无损连接性
若满足无损链接性,则:
- 必须有公共字段,并且公共字段能唯一标识数据
# 保持依赖性
判断在原来的未分解的表中,若每个函数依赖的左右两边的属性,都在被分解后的同一张表中,则有保持依赖性
- 如果拆分后的属性,能推导出原来的所有函数,就有保持依赖性
# 模式分解算法
# BCNF 分解
任取不满足 的依赖,假设为 ,分解为 和 ,然后继续对 进行判断,直到都满足
分解是无损分解,但不一定是保持依赖分解
# 3NF 分解
- 先找出最小覆盖
- 对于最小覆盖中的每个依赖 ,都分解出一个关系模式
- 验证无损连接性
- 若原候选码 不能再任意一个分解出的关系模式中找到,加一个
- 如果找得到,那分解结束
分解不仅是无损分解,而且是保持依赖分解