数据库关系模式分解 - 无损连接和保持函数依赖性

本文详细介绍了关系模式的概念,包括列名集合U和函数依赖集合F,以及函数闭包的定义。接着讨论了无损连接的定义及其在分解关系模式时的应用,包括两个子模式和多个子模式的无损连接判断方法。最后,探讨了如何通过保持函数依赖性来验证分解的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 概述

1.1 关系模式: R < U , F > R<U,F> R<U,F>

关系模式 R < U , F > R<U,F> R<U,F>,其含义表示如下:
R:表名
U:列名的集合,如:列A,B,C,D,E,记作: U = { A B C D E } U=\{ABCDE\} U={ABCDE}
F:关系的集合,如:A→B,B→C,D→E,记作: F = { A → B , B → C , D → E } F=\{A→B,B→C,D→E\} F={ABBCDE}

1.2 函数闭包 F + F^+ F+

定义:在关系模式 R < U , F > R<U,F> R<U,F> 中为 F F F 所逻辑蕴涵的函数依赖的全体叫作 F F F 的闭包,记作 F + F^+ F+

  • 通俗理解 F + F^+ F+ F F F 中写了的 + + + 没写的

举例说明:
U = { A B C D E } , F = { A → B , B → C , D → E } U=\{ABCDE\},F=\{A→B,B→C,D→E\} U={ABCDE}F={ABBCDE},则
F F F 中写了的有: A → B , B → C , D → E A→B,B→C,D→E ABBCDE
F F F 中没写的有: A → C A→C AC(根据 传递函数依赖 所得)
所以 F + = { A → B , B → C , D → E , F^+=\{A→B,B→C,D→E, F+={ABBCDE A → C A→C AC } \} }

2 无损连接

  • 定义:将一个关系模式分解成若干个关系模式后,通过自然连接和投影等运算仍能还原到原来的关系模式,则称这种分解为无损连接分解。

2.1 两个子模式

定理:关系模式 R ( U , F ) R(U,F) R(U,F) 的一个分解 ρ = { R 1 ( U 1 , F 1 ) , R 2 ( U 2 , F 2 ) } ρ=\{R_{1}(U_1,F_1), R_{2}(U_2,F_2)\} ρ={R1(U1,F1),R2(U2,F2)},具有无损连接的充分必要条件是: U 1 ∩ U 2 → U 1 − U 2 ∈ F + 或 U 1 ∩ U 2 → U 2 − U 1 ∈ F + U_1∩U_2 → U_1 - U_2 ∈ F^+ 或 U_1 ∩ U_2 → U_2 - U_1 ∈ F^+ U1U2U1U2F+U1U2U2U1F+
注意:这个定理只适用于分解为两个子模式的情况,分解为多个模式的时候不适用。

【例题】对给定的关系模式 R ( U , F ) , U = { A , B , C } , F = { A → B } R(U,F),U=\{A,B,C\},F=\{A→B\} R(U,F)U={A,B,C}F={AB},有两个分解: ρ 1 = { A B , B C } 和 ρ 2 = { A B , A C } ρ_1=\{AB,BC\} 和 ρ_2=\{AB,AC\} ρ1={ABBC}ρ2={ABAC}。请判断这两个分解是否无损。

ρ 1 ρ_1 ρ1 是否无损连接分析:
A B ∩ B C = B , A B − B C = A , B C − A B = C AB ∩ BC = B,AB - BC = A,BC-AB = C ABBC=BABBC=ABCAB=C F + = { A → B } F^+=\{A → B\} F+={AB}
B → A ∉ F + , B → C ∉ F + B → A ∉ F^+,B → C ∉ F^+ BA/F+BC/F+,故 ρ 1 ρ_1 ρ1 为有损连接。
 
ρ 2 ρ_2 ρ2 是否无损连接分析:
A B ∩ A C = A , A B − A C = B , A C − A B = C AB ∩ AC = A,AB - AC = B,AC-AB = C ABAC=AABAC=BACAB=C F + = { A → B } F^+=\{A → B\} F+={AB}
A → B ∈ F + A → B ∈ F^+ ABF+,故 ρ 2 ρ_2 ρ2 为无损连接。

2.2 多个子模式

书上公式太复杂了,直接说解法过程。
步骤1:构造一个 i i i j j j 的表,第 i i i 行对应关系模式 R i R_i Ri,第 j j j 列对应属性 A j A_j Aj。如果 A j ∈ R i A_j ∈ R_i AjRi,则在第 i i i 行第 j j j 列上放元素 a j a_j aj,否则放元素 b i j b_{ij} bij
 
步骤2:重复考察 F F F 中的 每一个函数依赖,并修改表中的元素。如:取 F F F 中一个函数依赖 X → Y X → Y XY,并在 X X X 列上寻找 元素相同的行,然后将这些行对应 Y Y Y 的值,按下列情况的 顺序 进行修改
     ① 如果其中有 a j a_j aj,则将 b i j b_{ij} bij 改为 a j a_j aj
     ② 如果其中无 a j a_j aj,则全部改为 b i j b_{ij} biji 是这些行的行号最小值
 
步骤3:比较表前后变化。如果发现表中某一行变成了 a 1 , a 2 , … , a n a_1, a_2, …, a_n a1,a2,,an,则分解 ρ ρ ρ 具有无损连接性;反之,不具有无损连接性。

举例:

U = { A , B , C , D , E } U=\{A,B,C,D,E\} U={ABCDE}
F = { A → C , B → C , C → D , D E → C , C E → A } F=\{A→C, B→C, C→D, DE→C, CE→A\} F={AC,BC,CD,DEC,CEA}
ρ = { R 1 , R 2 , R 3 , R 4 , R 5 } ρ=\{R_1, R_2, R_3, R_4, R_5\} ρ={R1,R2,R3,R4,R5},其中 R 1 = A D , R 2 = A B , R 3 = B E , R 4 = C D E , R 5 = A E R_1=AD,R_2=AB,R_3=BE,R_4=CDE,R_5=AE R1=ADR2=ABR3=BER4=CDER5=AE,分析 ρ ρ ρ 的分解是否无损

步骤1:构造 i 行 j 列 的表…

A B C D E
AD a1 b12 b13 a4 b15
AB a1 a2 b23 b24 b25
BE b31 a2 b33 b34 a5
CDE b41 b42 a3 a4 a5
AE a1 b52 b53 b54 a5

步骤2:重复考察 F 中的每一个函数依赖,并修改表中的元素
在这里插入图片描述

步骤3:判断是否具有无损连接性

  • 通过观察发现,只有 BE 具有无损连接性

3 保持函数依赖性

在这里插入图片描述

核心思想F 分解的子集合并(∪)之后,仍能恢复原 F 的函数依赖关系(即: F 1 ∪ F 2 ∪ F n = F F_1∪F_2∪F_n=F F1F2Fn=F)。可分为以下四步,进行判断
第一步:求每个 F i Fi{} Fi。即 F F F 的子集
第二步:求原 F { } F\{\} F{} 中左侧元素的闭包,将其补齐在 F i { } Fi\{\} Fi{}
第三步:求 G(分解 ρ 关系模式的并集),判断 F F F 中的关系是否都在 G G G
第四步:如果在,则保持函数依赖,如果不在,就对其求闭包(在 G G G 中)
             如果闭包包含它的右侧元素,则保持函数依赖,否则就不保持

【例题】R={A,B,C,D,E},F={B→A,D→A,A→E,AC→B},判断分解 ρ={R1{ABCE},R2{CD}} 是否保持函数依赖

第一步:求 F 1 F1{} F1 F 2 F2{} F2。题干中分成了两个,R1 和 R2
F 1 = { B → A , A → E , A C → B } F1=\{B→A,A→E,AC→B\} F1={BAAEACB}。依据:左右两侧元素是否都在 R 中?若是,则填入 F,若否,则不填
F 2 = { 空 } F2=\{空\} F2={}
 
第二步:求 F F F 中左侧元素的闭包。目的是为了找出所有 传递函数依赖
【注1:过滤到 平凡函数依赖(自己 推导出 自己) 和 题干中已有依赖
B + = { B A E } B^+ = \{BAE\} B+={BAE}。得到 B → E B→E BE
D + = { D A E } D^+ = \{DAE\} D+={DAE}。得到 D → E D→E DE
A + = { A E } A^+ = \{AE\} A+={AE}
A C + = { A C E B } AC^+ = \{ACEB\} AC+={ACEB}。得到 A C → A , A C → E AC→A,AC→E ACAACE

然后补齐在 F 1 和 F 2 中 F1 和 F2 中 F1F2,得到
【注2: F 1 F1 F1 是由 ABCE 4个元素组成, F 2 F2 F2 只由 CD 2 个元素组成】
F 1 = { B → A , A → E , A C → B , F1=\{B→A,A→E,AC→B, F1={BAAEACB B → E , A C → A , A C → E B→E,AC→A,AC→E BEACAACE } \} }
F 2 = { 空 } F2=\{空\} F2={}
 
第三步:求 G(分解 ρ 关系模式的并集)
G = F 1 ∪ F 2 = { B → A , A → E , A C → B , B → E , A C → A , A C → E } G=F1 ∪ F2=\{B→A,A→E,AC→B,B→E,AC→A,AC→E\} G=F1F2={BAAEACBBEACAACE}
根据题干可知: F = { B → A , A → E , A C → B , D → A } F=\{B→A,A→E,AC→B,D→A\} F={BAAEACBDA}
通过观察发现, F F F 中只有 D → A D→A DA 不在 G G G
 
第四步:判断 D G + D^+_G DG+ 是否有 A A A?
根据题干: D + = { D } D^+=\{D\} D+={D},没有包含它右侧的 A A A,所以不保持函数依赖

无损连接分解(Lossless Join Decomposition)保持函数依赖分解(Preserving Functional Dependency Decomposition)都是关系数据库设计中常用的分解技术。 无损连接分解是指将一个关系模式R分解为多个关系模式R1、R2、……Rn的过程。这个过程需要满足两个条件:1)分解后的关系模式能够覆盖原始关系模式R中的所有属性;2)分解后的关系模式能够保留原始关系模式R中的所有函数依赖关系。如果一个关系模式R可以通过无损连接分解得到多个关系模式R1、R2、……Rn,并且这些关系模式可以通过连接操作重新还原成原始关系模式R,则称这个分解无损连接分解保持函数依赖分解是指将一个关系模式R分解为多个关系模式R1、R2、……Rn的过程。这个过程需要满足两个条件:1)分解后的关系模式能够覆盖原始关系模式R中的所有属性;2)分解后的关系模式能够保留原始关系模式R中的所有函数依赖关系。如果一个关系模式R可以通过保持函数依赖分解得到多个关系模式R1、R2、……Rn,并且这些关系模式可以通过连接操作重新还原成原始关系模式R,则称这个分解保持函数依赖分解。 总的来说,无损连接分解保持函数依赖分解都是关系数据库设计中常用的分解技术。它们的目的都是将一个关系模式分解成多个关系模式,以便更好地管理查询数据。无损连接分解保持函数依赖分解需要满足一定的条件,以确保分解后的关系模式能够覆盖原始关系模式中的所有属性函数依赖关系,并且能够通过连接操作重新还原成原始关系模式
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼丸丶粗面

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值