-
模式分解
(1) 目标
将一个大的关系模式用几个较小的模式代替
(2) 定义
关系模式R(U), ρ = {R1(U1), R2(U2), …, Rk(Uk)}是一个关系模式的集合,若U1∪U2∪…∪Uk = U成立,则ρ是R(U)的一个分解
(3) 一个关系模式可以有多种不同的分解
(4) 模式分解的__原则__
1° 不丢失信息
对同样的数据,分解前后的查询结果应相同
2° 保持函数依赖关系
不丢失数据间的约束关系
-
无损连接分解
(1) 分解后的关系通过__自然连接__能够恢复为原来的关系,保证连接后的关系与原关系完全一致,则称为__无损连接分解__
(2) 有损连接分解可能会丢失元组,也有可能增加元组
(3) 无损连接分解满足的是模式分解的原则1:不丢失信息
-
判断一个分解是否是无损连接分解的方法
(1) 通用方法
属性集合U: A1, A2, …, An
分解 R1, R2, …, Rk,每个分解包含的都是U的真子集
函数依赖集F
步骤:
1° 构造一张表, k行n列,表中每个单元(i行j列)的取值为:
如果该行对应的分解中包括了该列的属性,填入aj;如果不包含,填入bij
2° 逐个考察函数依赖集F中的每个依赖关系 Xi -> Yi,若Xi包括了属性Ap,Aq,则在所有行中寻找在Ap,Aq列相等的行。这时再看Yi对应的几个属性列,如果在这些行中对应属性列的取值里出现了aj,则修改其他行的列值都是aj;如果没出现aj,则将这些行的列值修改为这些行中具有最小下标的bij的值。总之,找到的这些在X上相等的行,经过这个步骤以后,它们的Y上也要相等
3° 对所有F中的函数依赖都操作以后,只要表中出现了一行,它们的值恰好为a1, a2, …, an,那么该分解为无损分解;否则为有损分解
(2) 判断只有两个关系连接时的简易方法
R的一个分解 ρ = {R1, R2},函数依赖集F,如果以下两个表达式至少有一个满足:
(R1∩R2)->(R1-R2) ∈ F (R1∩R2)->(R2-R1) ∈ F
则ρ具有无损连接性
-
分解的保持依赖性
(1) 判断分解为多个关系以后,分解后的函数依赖关系是否与原函数依赖集等价
(2) 判断方法
设函数依赖集为F,分解 R1, R2, …, Rk
1° 对分解后的每个关系Ri,求F在Ri上的函数依赖投影Ri(F)
2° 令G = ∪Ri(F),对F中的每个依赖X->Y,在G中分别计算X的属性闭包,并检验是否包含Y中所有属性;如果G可以蕴含F中的所有函数依赖,则保持分解依赖性
chapter10_关系数据库设计理论_3_模式分解
最新推荐文章于 2022-07-09 17:09:11 发布