数据库原理 六 补充

模式的分解

定义:关系模式R<U,F>的一个分解是指p={R1<U1,F1>, R2<U2,F2>,...,Rn<Un,Fn>}

其中U=U1∪U2∪...∪Un 并且没有Ui包含于Uj

定义:函数依赖集合{X→Y | X→Y ∈F+ 且 XY 包含于U}的一个覆盖Fi叫做F在属性Ui上的投影。

模式分解的3个定义

1)分解具有“无损连接性”

2)分解要“保持函数依赖”

3)分解既要具有“无损连接性”也要“保持函数依赖”

分解的无损连接性和保持函数依赖性

定义一个记号p是R<U,F>的一个分解,r是R<U,F>的一个关系,定义mp(r)=全连接πRi(r),即mp(r)是r在p中各种关系模式上的投影的连接。

则有:

(1) r包含于mp(r)

(2)若s=mp(r)则πRi(s)=ri

(3)mp(mp(r))=mp(r)

定义:p是R的一个分解,若对R<U,F>的任何一个关系r均有r=mp(r)成立,则称分解p具有无损连接性。

算法:判断一个分解的无损连接性。

(1)建立一张n列k行的表,每一列对应一个属性,每一行对应分解中的一个关系模式。若属性Aj属于Ui,则在j列i行交叉处填上aj,否则填bij。

(2)对每一个FDi做下列操作:找到Xi所对应的列中具有相同符号的那些行。考察这些行中li列中的元素,若其中有ali则全部改为ali,否则全部改为bmli

若某次更改之后,有一行称为a1,a2,...,an。则算法终止。p具有无损连接性。否则p不具有无损连接性。

模式分解的算法

合成法(转换为3NF的保持函数依赖的分解)

(1)对于 R<U,F>中的函数依赖集F进行“极小化处理”

(2)找出不在F中出现的属性,把这样的属性构成一个关系模式。把这些属性从U中去掉,剩余的属性仍记为U

(3)若有X→A∈F且XA=U,则p={R},算法终止

(4)否则,对F按具有相同左部的原则分组(假定为k组),每一组的函数依赖F‘i所设计的全部属性形成一个属性集Ui。若Ui包含于Uj(Ui≠Uj),就去掉Ui。

进一步地,转换为3NF既有无损连接性又有函数依赖的分解。

(1)X是R<U,F>的码,R<U,F>已经根据合成法分解为p,另t=p∪R*<X,Fx>

(2)若有某个Ui,X包含于Ui,将R*<X,Fx>从t中去掉。

(3)t就是所求的分解。

分解法(转换为BCNF的无损连接分解)

(1)令p={R<U,F>}

(2)检查p中个关系模式是否均属于BCNF。若是,则算法终止。

(3)必有X→A∈Fi+(A∉X)且X非Ri的码,因此XA是Ui的真子集。对Ri进行分解Q={S1,S2},Us1=XA,Us2=Ui-{A},以Q代替R(Ui,Fi),返回第二步。

这是一个自顶向下的算法,它自然地形成一棵对R(U,F)的二叉分解树。

小结

  • 若要求分解具有无损连接性,那么模式分解一定能够达到4NF
  • 若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不一定能够达到BCNF
  • 若要求分解既具有无损连接性,又保持函数依赖,则模式分解一定能够达到3NF,但不一定能够达到BCNF
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值