吉林大学数据库系统概念第八章汇总

一、超码:是一个或多个属性的集合,这些属性可以让我们在一个实体集中唯一地标识一个实体。所有包含超码的集合也是超码

候选码:最小的超码

主码:选择一个候选码

求候选码:

第一步:
只出现在→左边的一定是候选码
只出现在→右边的一定不是候选码
→左右都不出现的一定是候选码
→左右都出现的不一定是候选码

第二步:
查看与每个其他属性结合成的子集能否推出其他所有属性,找出元素数量最少的即为候选码。

例题:R<U,Q>,U=(A,B,C,D,E,F,G),Q={AB→C,CD→E,E→A,A→G},求候选码

只在右:G
只在左:B,D
左右都在:A,C,E
左右都不在:F

所以一定是候选码的有:BDF

BDF→BDF
ABDF→ABCDEFG
BCDF→ABCDEFG
BDEF→ABCDEFG

由于本题仅添加一个属性即可推出所有属性,而且候选码为最少属性数量的集合,因此候选码可以为ABDFBCDFBDEF
如果添加一项不能推出所有属性,可以添加两项继续排查,直至找出能推出所有属性的最少属性集合。

二、正则覆盖的求法与判断属性是否冗余

(1)正则覆盖定义:

一个依赖集F的正则覆盖Fc也是一个依赖集,F逻辑蕴含Fc中所有依赖,且Fc逻辑蕴涵F的所有依赖。

(2)Fc满足以下两个特性:

·Fc中任何函数依赖都不含无关属性

·Fc中函数依赖左半部分都是唯一的,不允许重复

(3)正则覆盖求解法:

1.使用合并律将所有左部相同的函数依赖合并成一个。

例1:设有一函数依赖集F,其中有{A→B,A→E,……},则将这两个函数依赖合并为{A→BE,……}

2.在合并后的函数依赖集中寻找一个无关属性,将它删除

无关属性的定义是什么呢?下面马上就提到

3.重复1、2步骤,直到依赖集不再发生变化

无关属性的判断(又称冗余):

给定一个函数依赖集F:

    (1)若要判断的属性位于依赖的右侧,例如{AB→C,……},则删除该属性,在余下的函数依赖集F'中计算该依赖左部集合的闭包α+。若α+中包含要判断的属性,则该属性就是无关属性(冗余)

例2:F{A→BC,B→AC,C→AB}

    关注B属性。它在依赖右侧。删除该属性,余下F'={A→C,B→AC,C→AB},计算左侧剩余属性集(A)的闭包(A)+。

因为A→C,C→AB,所以(A)+中包含删去的属性B,故B是无关属性

    (2)若要判断的属性位于依赖的左侧,例如{AB→C},则删除该属性,在原本的依赖集F中计算该依赖左部集合的闭包α+。若α+闭包中包含该依赖右侧所有的属性,则该属性则是无关属性

例3:函数依赖集F{Z→X,X→P,XY→WP,XYP→ZW}

     关注到XYP中的P属性。它在左侧。删除它,求解左侧剩下属性集XY的闭包,求取域是原来的F{Z→X,X→P,XY→WP,XYP→ZW}。因为XY→WP,所以(XY)+  = XYWP;又因为XYP→ZW,所以(XY)+ = XYWPZ,包含依赖右侧ZW,故P是无关属性

例4:F{A→BC,B→C,AB→C}

      关注AB→C的A属性。删除它后余下的部分B→C在F中已经存在,故A是无关属性。

一道完整的正则覆盖的题目:

例5:F={Z→X,X→P,XY→WP,XYP→ZW},求出一个正则覆盖

第一次循环,未发现可合并项;直接快进至寻找无关属性

    首先关注到XYP→ZW的P属性。根据例题③的步骤,得知它是无关属性,故删除,F'={Z→X,X→P,XY→WP,XY→ZW}

第二次循环。发现可以合并{XY→WP,XY→ZW},得F'={Z→X,X→P,XY→PWZ}

寻找无关属性。发现{XY→PWZ}中P属性。删除P属性后,F'={Z→X,X→P,XY→WZ},计算XY+ = XYWZP,包含P属性,故P属性无关,可以删除。

Fc={Z→X,X→P,XY→WZ}中,每个元素都不是无关元素,无法再删,故解得正则覆盖。

三、3NF分解

1、先求出正则覆盖Fc。

2、对于Fc里面的所有函数依赖a->b,均转化为Ri=ab。

3、对于所有的模式Ri:

如果包含候选码,进行第4。

如果都不包含候选码, 将任意一个候选码添加到模式Ri里面。

4、如果一个模式被另一个模式包含,则去掉此被包含的模式。

例6:U={A,B,C,D,E,G},F={B->G,CE->B,C->A,CE->G,B->D,C->D}

正则覆盖为{B->DG,CE->B,C->AD}

R1=BDG,R2=CEB,R3=CAD

CE是候选码,R2包含CE

R1,R2,R3没有包含关系

3NF分解为{BDG},{CEB},{CAD}

例7:关系模式r(A,B,C,D,E,F),函数依赖集F:A->BCD ,BC->DE,B->D,D->A

1.正则覆盖是:A->BC. B->DE,D->A

2.R1=ABC,R2=BDE,R3=DA,不包含候选码(AF,BF,DF)中任意一个,所以任意添加一个R4=AF

3. 3NF分解为{ABC,BDE,DA,AF}

2.BCNF分解

给出R和函数依赖集F:

四.BCNF分解

给出R和函数依赖集F:

(1)求出候选码

(2)观察函数依赖集,如果左边不是超码(候选码),则不满足条件

(3)用不满足条件的函数依赖(A->B)进行分解,这样分解之后就满足了

R1=AB(这样就满足了)

R2=(R-R1)∪A

F2={…}去掉B的所有函数依赖,尽可能写全

(4)对F2进行步骤1的计算。

(5)重复直到所有的满足条件

 

 

例:R(A,B,C,D,E)

F={A->C,C->D ,B->C,DE->C,CE->A}

候选码为BE

考虑A->C,

R1=AC,R2=ABDE

F2={A->D,B->D,DE->D,BE->A,DE->A},候选码为BE,不是BCNF分解,所以继续分解。

考虑A->D

R21=AD,R22=ABE

F22={BE->A} 候选码为BE,全部满足

所以为{AC,AD,ABE}

例子:

 

R候选码为A,CD,BC,E

存在非候选码B,B->D

所以R不是BCNF分解。

考虑B->D,

R1=BD

R2=ABCE

F2={A->BC,BC->E,E->A,BC->A}候选码为A,E,BC

所以BCNF分解为{ABCE,BD}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Code Slacker

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

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

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

打赏作者

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

抵扣说明:

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

余额充值