模式的分解
6.4.1 模式分解的三个定义
6.4.2 分解的无损连接性和保持函数依赖行
6.4.3 模式分解的算法
➢ 关系模式的规范化过程是通过对关系模式的分解来实现的
➢ 什么是模式分解
定义6.16 R<U, F>的一个分解是指:ρ = {
R
1
R_1
R1<
U
1
U_1
U1,
F
1
F_1
F1>,…,
R
n
R_n
Rn<
U
n
U_n
Un,
F
n
F_n
Fn},其中U=
U
1
U_1
U1∪
U
2
U_2
U2∪…∪
U
n
U_n
Un,并且没有
U
i
U_i
Ui⊆
U
j
U_j
Uj,1≤i, j≤n,
F
i
F_i
Fi是F在
U
i
U_i
Ui上的投影
相应地将R存储在二维表r中的数据分散到二维表
r
1
r_1
r1,
r
2
r_2
r2,…,
r
n
r_n
rn中去,其中
r
i
r_i
ri是r在属性集
U
i
U_i
Ui上的投影
➢ 把低一级的关系模式分解为若干个高一级的关系模式并不是唯一的
➢ 在这些分解方法中,只有能够保证分解后的关系模式与原关系模式等价的方法才有意义
➢ 从不同的角度去观察问题,对“等价”的概念行成了3中不同的定义:
● 分解具有无损连接性(lossless join)
● 分解要保持函数依赖(preserve functional dependency)
● 分解既要保持函数依赖,又要具有无损连接性
➢ 这三个定义是实行模式分解的三条准则
[例] 对于关系模式S-L(Sno, Sdept, Sloc),S-L中有下列函数依赖
Sno→Sdept,Sdept→Sloc,Sno
⟶
传
递
\stackrel{传递}{\longrightarrow}
⟶传递Sloc
➢ 已知S-L∈2NF,该关系模式存在非主属性对码的传递函数依赖
➢ 存在插入异常、删除异常、数据冗余度大和修改复杂的问题。需要分解该关系模式,使成为更高范式的关系模式
➢ 下面给出集中不同的分解情况,进行分析,引出模式分解的3个定义
➢ 第一种分解情况
将S-L分解为下面三个关系模式:SN(Sno)、SD(Sdept)、SO(Sloc)
➢ SN、SD、SO都是规范化程度很高的关系模式
➢ 但分解后的关系模式会丢失许多信息——这种分解是不可取的。丢失了许多信息,丢失了数据之间的联系的信息
➢ 第二种分解情况
将S-L分解为下面两个关系模式:NL(Sno, Sloc)、DL(Sdept, Sloc)
NL⋈DL比原来的S-L关系多了若干个元组
因此我们也无法知道原来的S-L关系究竟有哪些元组,从这个意义上说此分解仍然丢失了信息
➢ 第三种分解情况
将S-L分解为下面两个关系模式:ND(Sno, Sdept)、DL(Sno, Sloc)
第三种分解情况没有丢失信息,称为分解“具有无损连接性”
➢ 但是它存在以下问题:
◾ 例如某学生由CS系转到IS系,ND关系的(95001,CS)元组和NL关系(95001,A)元组必须同时进行修改,否则会破坏数据库的一致性
原因:
➢ S-L中的函数依赖Sdept→Sloc既没有投影到关系模式ND上,也没有投影到关系模式NL上
➢ 这种分解没有保持原关系模式中的函数依赖
➢ 第四种分解情况
将S-L分解为下面两个关系模式:ND(Sno, Sdept), Sno→Sdept DL(Sdept, Sloc), Sdept→Sloc
这种分解保持了函数依赖,称为“具有保持函数依赖性”
这种分解不仅“具有保持函数依赖性”,还“具有无损连接性”
6.4.1 模式分解的三个定义
6.4.2 分解的无损连接性和保持函数依赖行
6.4.3 模式分解的算法
定义6.18
ρ = {
R
1
R_1
R1<{
U
1
U_1
U1, {
F
1
F_1
F1>,…,
R
n
R_n
Rn<{
U
n
U_n
Un, {
F
n
F_n
Fn>}是R<U, F>的一个分解,若对R<U, F>的任何一个关系r均有r = r在ρ中各关系模式上投影的自然连接成立,则称分解ρ 具有无损连接性。简称ρ 为无损分解
➢ 只有具有无损连接性的分解才能够保证不丢失信息
➢ 无损连接性不一定能解决插入异常、删除异常、修改复杂、数据冗余等问题。
*算法6.2 判别一个分解的无损连接行
定义6.19
ρ = {
R
1
R_1
R1<{
U
1
U_1
U1, {
F
1
F_1
F1>,…,
R
n
R_n
Rn<{
U
n
U_n
Un, {
F
n
F_n
Fn>}是R<U, F>的一个分解,若F所逻辑蕴含的函数依赖一定也为分解后所有的关系模式中的函数依赖
F
i
F_i
Fi所逻辑蕴含,即
F
+
F^+
F+ = (
F
1
F_1
F1∪
F
2
F_2
F2∪…∪
F
n
F_n
Fn) +,则称关系模式R的这个分解是保持函数依赖的(Preserve dependency)
➢ 如果一个分解具有无损连接性,则它能够保证不丢失信息。
➢ 如果一个分解保持了函数依赖,则它可以减轻或解决各种异常情况
➢ 分解具有无损连接性和分解保持函数依赖是两个相互独立的标准
◾ 具有无损连接性的分解不一定能够保持函数依赖
◾ 具有函数依赖的分解也不一定具有无损连接性
6.4.1 模式分解的三个定义
6.4.2 分解的无损连接性和保持函数依赖行
6.4.3 模式分解的算法
➢ 算法6.3 (合成法)转换为3NF的保持函数依赖的分解
➢ 算法6.4 转换为3NF既有无损连接性又保持函数依赖的分解
➢ 算法6.5 (分解法)转换为BCNF的无损连接分解
➢ 算法6.6 达到4NF的具有无损连接性的分解
➢ 按照不同的分解算法,关系模式所能达到的范式是不相同
◾ 若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不一定能够达到BCNF
◾ 若要求分解既具有无损连接性,又保持函数依赖,则模式分解一定能够达到3NF,但不一定能够打包BCNF
◾ 若要求分解具有无损连接性,那么模式分解一定能够达到4NF
无损连接 | 保持依赖 | 达到的范式 |
---|---|---|
Y | 3NF,不一定BCNF | |
Y | Y | 3NF,不一定BCNF |
Y | 4NF |