数据库范式之间的转换 - 保持函数依赖分解与有/无损分解

本文介绍了数据库模式分解中的函数依赖保持和无损分解概念。通过实例展示了如何将关系模式R(A,B,C)及其依赖集F(A->B, B->C, A->C)分解为R1(A,B)和R2(B,C),并分析了该分解如何保持函数依赖以及如何判断是否为无损分解。同时,解释了如何通过算法判断分解是否保持了所有函数依赖。
摘要由CSDN通过智能技术生成

范式之间的转换一般都是通过拆分属性,即模式分解,将具有部分函数依赖和传递依赖的属性分离出来,来达到一步步优化,一般分为以下两种;

保持函数依赖分解

对于关系模式R,有依赖集F,若对R进行分解,分解出来的多个关系模式,保持原来的依赖集不变,则为保持函数依赖的分解。另外,注意要消除掉亢余依赖(如传递依赖)。
如原关系模式 R(A,B,C),依赖集F(A->B,,B->C,A->C),将其分解为两个关系模式 R1(A,B)和R2(B,C),此时 R1中保持依赖 A->B,R2保持依赖B->C,说明分解后的R1 和R2是保持函数依赖的分解,因为A->C这个函数依赖实际是一个亢余依赖,可以由前两个依赖传递得到,因此不需要管。
在这里插入图片描述

如何判断是否保持函数依赖

1、如果F上的每一个函数依赖都在其分解后的某一个关系上成立,则这个分解是保持依赖的,看函数莓个依赖的左右两边属性是否都在同一个分解的模式中。
2、如果上述判断失败,并不能断言分解不是保持依赖的,还要使用下面的通用方法来做进一步判断。该方法的表述如下:
对F上的每一个α→β使用下面的过程
result:=a ;
while(result 发生变化)do
for each 分解后的 Ri
t=(result∩Ri)+ ∩Ri
result = result ∪ t

无损分解

分解后的关系模式能够还原出原关系模式,就是无损分解,不能还原就是有损。

例:

假设关系模式R(U,F).属性集U=(A,B,C),函数依赖集F=(A→B,B→C)。若将其分解为P=(R1(U1,F1),R2(U2.F2),
其中U1={A,B},U2={A,C},那么关系模式R.R1.R2分别达到了        ;分解          。

先看是否是无损分解

分解后的R1:函数依赖A→B,符合分解前的依赖函数集中的A→B;
分解后的R2:函数依赖A→C;
通过R1,R2的函数依赖可知,A→B 、A→C;所以A→B→C;A→B、B→C复合未分解前的函数依赖集F=(A→B,B→C),是无损分解。

是否保持函数依赖

首先,该分解,U1 保持了依赖 A->B,然而B->C 没有保持,因此针对 B->C 需要用第2 点算法来判断:
result=B,resultn∩U1=B,B+ =BC,BC∩U1=B,result=B∪B=B,result 没变,然后,result 再和 U2
交是空,结束了,不保持函数依赖。
注意,这里B+,+的意思是代表由B能够推导出的其他所有属性的集合,这里,B->C,因此B+=BC。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

梦里藍天

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

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

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

打赏作者

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

抵扣说明:

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

余额充值