【数据库系统】函数依赖及其公理定理(4) 模式分解

本文详细介绍了关系模式的分解,包括无损连接分解和保持依赖性分解的原理与检验算法。讨论了BCNF、3NF、4NF等数据库范式,并阐述了如何确保分解同时满足无损连接和保持依赖。此外,提到了第五范式(5NF)以及连接依赖的概念。
摘要由CSDN通过智能技术生成

0.什么是模式分解

当模式不符合关系范式时,需要进行模式分解

[Definition]模式分解
关系模式R(U)的分解是指用R的一组子集 ρ = R 1 ( U 1 ) , … , R k ( U k ) ρ={R_1(U_1),…,R_k(U_k)} ρ=R1(U1),,Rk(Uk)来代替它。
其中 U = U 1 ∪ U 2 ∪ … ∪ U k ; U i ⊄ U j ( i ! = j ) U= U_1∪ U_2∪…∪ U_k;U_i⊄ Uj_ (i!=j) U=U1U2UkUiUj(i!=j)
注:为便于后面叙述,用 R i R_i Ri 代替 R i ( U i ) R_i(U_i) Ri(Ui), R R R代替 R ( U ) R(U) R(U)

在这里插入图片描述

模式分解需要关注:
 R与ρ 在数据内容方面是否等价:分解的无损连接性;
 R与ρ 在数据依赖方面是否等价:分解的保持依赖性。

[引理1] R R R为一关系模式, ρ = R 1 , … , R k ρ={R_1,…,R_k} ρ=R1,,Rk R R R的一个分解,r是 R R R的任一个关系, 记 r i = π R i ( r ) r_i=π_{R_i} (r) ri=πRi(r)(即R在 r i r_i ri模式上的投影),则有规则成立:

  1. r ⊆ m ρ ( r ) r ⊆ m_ρ(r) rmρ(r):说明一个大的关系模式,分解为多个小的关系模式,如果把大的关系模式投影到小的关系模式再连接起来,连接到结果相比原先大的关系要增加信息,这些信息很有可能是错误的(如下图,r有4个关系,而 m ρ ( r ) m_ρ(r) mρ(r)有8个关系)
  2. s = m ρ ( r ) s= m_ρ(r) s=mρ(r), 则 π R i = r i π_{R_i}= r_i πRi=ri(即: π R i ( m ρ ( r ) ) = π R i ( r ) ) π_{R_i}(m_ρ(r))= π_{R_i}(r)) πRi(mρ(r))=πRi(r)) 这说明小的关系模式连接的结果 s = m ρ ( r ) s= m_ρ(r) s=mρ(r)再反过来投影到小的关系模式上 π R ( m ρ ( r ) ) π_R(m_ρ(r)) πR(mρ(r))和原来的小的关系模式 r i = π R i ( r ) r_i=π_{R_i} (r) ri=πRi(r)相同
  3. m ρ ( m ρ ( r ) ) = m ρ ( r ) m_ρ(m_ρ(r))=m_ρ(r) mρ(mρ(r))=mρ(r) 如果我们再次将分解后的投影的连接再次分解投影连接的话还是和第一次操作的结果相同,不会产生更多的信息

在这里插入图片描述

这三条关系模式告诉我们如果把大的关系模式分解为小的关系模式,如果我们不加以注意,就会出现一些错误的信息

下面是一个模式分解的例子:
在这里插入图片描述
分解后好像有约束(CS→Z)丢失了
因此约束丢失也是一个问题

在这里插入图片描述

1.无损连接分解及其检验算法

在这里插入图片描述
主要就是要求 r ⊆ m ρ ( r ) r ⊆ m_ρ(r) rmρ(r),就是大的关系模式经过模式分解得到的结果再进行连接,要求连接的结果和原来的关系模式相等,如果不满足就是有损连接

无损连接性检验算法
在这里插入图片描述
R ρ R_ρ Rρ表:
每一列是原关系模式的属性
每一行是分解后的小的模式

首先再行列交叉点填写 a j a_j aj b i j b_{ij} bij
如果 A j ∈ R i A_j∈R_i AjRi(就是分解后的模式中含有该属性),则填写 a j a_j aj,否则填写 b i j b_{ij} bij
在这里插入图片描述

然后在根据 ∀ ( X → Y ) ∈ F ∀(X→Y)∈F (XY)F, 对 R ρ R_ρ Rρ表进行修改:
给定X→Y, 寻找X属性取值相同的行, 用其值修改X对应的Y属性值(将Y的符合全部修改成一样的,有a则置为a,没有就选编号最小的b);

最后判定修改后, 如果有一行变 成 a 1 , a 2 , … , a n ( 全 为 a ) 成a_1, a_2,…, a_n(全为a) a1,a2,,an(a), 则ρ无是损连接分解, 否则为有损连接分解。

例子哈:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
PS:如果只有两个关系,还有这么一个判别方法:
如果 R 1 ∩ R 2 → R 1 − R 2 R_1∩R_2→R_1-R_2 R1R2R1R2或者 R 1 ∩ R 2 → R 2 − R 1 R_1∩R_2→R_2-R_1 R1R2R2R1
则是无损链接的
在这里插入图片描述
在这里插入图片描述

2.保持连接分解及其检验算法

[Definition]保持依赖分解
对于关系模式R(U, F), U是属性全集,F是函数依赖集合, ρ = R 1 , … , R k ρ={R_1,…,R_k} ρ=R1,,Rk是R的一个分解,如在 π R i ( F ) π_{R_i}(F) πRi(F)中的所有依赖之并集(i=1,…,k),逻辑蕴涵F的每个依赖,则称分解ρ保持依赖集F。
其中 π R i ( F ) π_{R_i}(F) πRi(F)是F在 R i R_i Ri上的投影,即F中的任一投影 X → Y X→Y XY,如果X, Y均包含于Ri ,则X→Y∈ π R i ( F ) π_{R_i} (F) πRi(F)( R i R_i Ri是分解 R i R_i Ri的属性集)。

注:
(1)保持依赖的分解可能不是无损连接的。
(2)无损连接的分解可能不是保持依赖的。

在这里插入图片描述

保持依赖性检验算法
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.关系模式无损连接或保持依赖的分解算法

3.1 关系模式分解成BCNF

在这里插入图片描述

将左侧不含候选键的函数依赖单独组成一个关系, 将包含候选键的组成一关系,一定是满足BCNF(无损连接)的
在这里插入图片描述
本算法保证:关系模式分解成BCNF(无损连接),但不一定保持依赖。
BCNF === 无损连接

3.2 关系模式分解成3NF

在这里插入图片描述

将每一个函数依赖单独组成一个关系

在这里插入图片描述
将每一个函数依赖单独组成一个关系,然后将F中相同的 X → A X→A XA合并

分解成第三范式一定能保存依赖,但不一定是无损连接的

3NF===保存依赖

3.3 既保持依赖,又无损连接的分解

在这里插入图片描述
把一个关系模式按照保持依赖的方式分解成第三范式以后,如果有某一个关系模式保存了候选键的所有属性,那么这个分解一定是既保持依赖又无损连接的;如果这个分解没有哪一个关系模式保存了全部的候选键,那么我们再增加一个模式,该模式保存了候选键,那么合在一起构成的新的分解就是既保持依赖,又无损连接的分解

(并不一定为最小可能关系模式的集合。我们可以依次去掉一个关系模式, 只要所要求的性质仍具备,直至求得上述最小集合。)
在这里插入图片描述

3.4 无损连接分解成4NF

在这里插入图片描述
这里和分解成BCNF类似,不过这里将函数依赖看作多值依赖进行处理

4.连接依赖与第5NF 连接依赖

在这里插入图片描述
连接依赖可以保持无损连接性

[定义]当且仅当关系模式R的每个连接依赖均按其候选键进行连接运算时(均由R的候选键所隐含),则称R是第五范式的,记为 R ∈ 5 N F R∈ 5NF R5NF

第五范式消除了不按候选键连接的连接依赖(R的无损连接分解中各模式必含有一个候选键),但其语义背景抽象。
 (只要有连接,必须包含候选键)

5 N F ∈ 4 N F 5NF∈4NF 5NF4NF。第五范式也称投影连接范式,即PJNF 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值