模式分解
关系模式是指关系的描述,现实世界随着时间在不断地变化,因而在不同的时刻,关系模式的关系也会有所变化。但是,现实世界的许多己有事实限定了关系模式所有可能的关系必须满足一定的完整性约束条件。
定义
关系的描述称为关系模式(Relation Schema)它可以形式化地表示为:
R(U,D,dom,F)
其中R为关系名,U为组成该关系的属性名集合,D为属性组U中属性所来自的域,dom为属性向域的映象集合,F为属性间数据的依赖关系集合。
通常简记为:
R(U)或R(A1,A2,…,An)
其中R为关系名,U为属性名集合,A1,A2,…,An为各属性名。
模式分解图(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中的所有函数依赖,则保持分解依赖性
参考详细:
网友评论