数据库概论之模式分解理论(理解简单明了)

模式分解:

模式分解的概念:

理解:

把关系模式R分解成k个关系模式,k个关系模式的的集合就是p={R1(U1),R2(U2),R3(U3),…,Rk(Uk)},

而U = U1∪U2∪U3∪…∪Uk。

每一个小的关系模式对应的关系(r1,r2,r3,r4,…,rk),它们也相当于R的关系r分别在R1,R2…上的投影,

把这些投影连接起来
即: 1

得到的就是R的任意关系向p的投影连接在这2里插入图片描述
在这里插入图片描述

模式分解的特性:

数据内容的等价性:

理解:

1.由关系模式R的任意关系r分解连接得到的新关系必然包含关系模式R的关系r。

2.关系模式R的任意关系r分解连接得到的新关系,记为S,S再分解得到的各个关系必然等于原来的ri。

扫描二维码关注公众号,回复: 10778744 查看本文章

3.由关系模式R的关系r分解连接得到的新关系S再次分解连接得到的关系,其必然跟原来的新关系S相同。

在这里插入图片描述

数据约束的等价性

理解:

若关系模式R进行模式分解,得到的R1(SZ),R2(CZ),必然会丢失约束CS->Z。

在这里插入图片描述

模式分解要考虑的问题:

理解:

如果想要把一个关系模式模式分解成若干个符合关系范式3NF的子关系模式,一般方法会把每个函数依赖单独组成一个关系。但是这样做可能会丧失无损连接性和保持依赖性。

在这里插入图片描述

模式分解的分类:

无损连接分解:

无损连接分解概念:

理解:

无损连接分解是指,对于一个关系模式R(U,F),U是属性全集,F是函数依赖集合,利用无损连接分解

p={R1,R2,R3,…,Rk},每一个关系模式对应的关系为{r1,r2,r3,…,rk},对于R的任意一个满足函数依赖集合的关系r来说,r = 每一个关系连接起来的新关系。

相当于分解连接后关系数据内容并不会改变(无损失)。这种分解就是无损连接分解。否则的话就是有损连接分解。

在这里插入图片描述

无损连接分解的检验算法:

理解:

怎么检验模式分解属于无损连接分解呢?

第一步,构造表,分解后的子关系模式从1到k充当行,一共k行。把关系模式R的属性全集U中每一个属性{U1,U2,U3,…,Un}充当列,一共n列。

第二步,依次遍历每一行,每一行中,若该属性Uj属于Ri中的,则把分量置为aj。若不是,则置为bij。

第三步,根据F中的每一个函数依赖X->Y,依次修改被决定因素Y对应的列值。不同行的X相同时,把该行对应的Y置为相同值。若其中,对应的Y的值存在aj,则其他值也改为aj,若都是bij,那只需要改成相同符号即可。

第四步,修改完F中所有的函数依赖后,若表中有一行为a1,a2,a3,…,an。则该模式分解为无损连接分解。

在这里插入图片描述
在这里插入图片描述

无损连接分解算法示例:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

无损连接分解的检验简单方法:

理解:

检验模式分解是否为无损连接分解更简单的方法有:

设R1和R2共同拥有的属性组X,R1-R2的属性组Y,仅当X函数决定Y时,即X->Y为F闭包,那么p={R1,R2}属于无损连接分解。

只使用于模式分解出两个关系模式{R1,R2}。

在这里插入图片描述

无损连接分解的性质:

理解:

a.关系模式R关于F无损连接分解得到的R1到Rk,Ri关于Fi无损连接分解得到的S1到Sk,那么{R1,R2,…,Rk,S1,S2,…,Sk}为R的无损连接分解。

b.关系模式R关于F无损连接分解得到的R1到Rk,若R的另一个分解包括R1到Rk,那么这个分解也为无损连接分解。

在这里插入图片描述

保持依赖分解:

保持依赖分解概念:

理解:

关系模式R(U,F),U是属性全集,F是函数依赖集合,p={R1,R2,…,Rk}是R的一个分解。如果F在每个子关系模式的分解的依赖的并集逻辑蕴含F中的每一个依赖,那么称分解p保持依赖集F。也就是保持依赖分解,依赖并没有丢。

保持依赖分解可能没有无损连接性。

无损连接分解可能没有保持依赖性。

在这里插入图片描述

保持依赖分解检验算法:

理解:
关于保持依赖分解的检验算法:首先一定要搞明白属性闭包是什么意思。保持依赖分解的检验目的是要找到G跟F等价(其实求出G逻辑蕴含F即可)。但是不可能把G的闭包全部写出来这时候就要借助属性闭包,把F中的每一个依赖X->Y,求X关于G的属性闭包,这个是很容易求的。可以依次遍历求出F中每一个X关于G的属性闭包,如果每一个属性闭包都包含对应的每一个Y,那么说明G逻辑蕴含F,这已经符合保持依赖分解的定义了。

在这里插入图片描述

保持依赖分解检验算法示例:

在这里插入图片描述

关系模式无损连接分解成SCNF算法:

一般方法分解成SCNF:

理解:

一般方式分解成SCNF,直接把F中的每一个依赖,决定因素含候选码的依赖合并在一起组成关系,决定因素不含候选码的依赖单独组成关系。

这样不一定满足无损连接性和保持依赖性。

在这里插入图片描述

采用无损连接分解

理解:

第一步:另p={R}

第二步:如果p中的模式不属于BCNF,把该模式的函数依赖集合F中,决定因素不含有候选码的依赖组成一个模式S1,其他依赖组成一个模式S2放入p中,此时S2为BC范式,因为S2中每一个决定决定因素都含有候选码,。然后把S1,S2替换掉R。

第三步,重复第二步,直到所有的模式都符合BCNF。

在这里插入图片描述

关系模式保持依赖分解成3NF:

一般方法分解成3NF:

理解:

一般模式分解成3NF的方法:把F中的每一个依赖都单独组成一个关系模式。

在这里插入图片描述

采用保持依赖分解:

理解:

采用保持依赖分解将关系模式分解成3NF:

第一步:把R中没有出现在F中的属性组成一个模。

第二步:把F中的每一个依赖单独组成一个模式,若决定因素有重复的,则合并组成模式。

第三步:模式的集合就是p。

这样可以保持每一个依赖,不会丢失。
在这里插入图片描述

关系模式分解成3NF或BCFN且既是无损连接又是保持依赖分解算法:

理解:

设p为采取保持依赖分解得到第三范式的分解,把p中的每一个模式跟X并集,则得到的分解就是满足无损连接性和保持依赖性的。且其中的模式有3NF也有BCNF。

在这里插入图片描述

发布了38 篇原创文章 · 获赞 38 · 访问量 2736

猜你喜欢

转载自blog.csdn.net/l13kddd/article/details/105349925