数据库系统概念 范式

                                          范式

函数依赖的定义:设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或 “Y函数依赖于X”,记作X→Y。即只要 X 的属性相等Y 上的值一定相等

平凡的函数依赖

在关系模式R(U)中,对于U的子集X和Y,

如果X→Y,但Y \subseteqX,则称X→Y是平凡的函数依赖。

非平凡的函数依赖

在关系模式R(U)中,对于U的子集X和Y,

若X→Y,但Y\nsubseteqX,则称X→Y是平凡的函数依赖。

例:在关系SC(Sno, Cno, Grade)中,            

非平凡函数依赖: (Sno, Cno) → Grade            

平凡函数依赖:   (Sno, Cno) → Sno                        (Sno, Cno) → Cno

●部分函数依赖:若X→Y,但Y不完全依赖于X,则称Y对X部分函数依赖。记作

完全函数依赖:在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X’Y, 则称Y对X完全函数依赖。记作

例:学校教务的数据库:学生的学号(Sno)、所在系(Sdept)系主任姓名(Mname)、课程号(Cno) 成绩(Grade) U ={Sno, Sdept, Mname, Cno, Grade } (Sno,Cno) →Grade是完全函数依赖, (Sno,Cno)→Sdept是部分函数依赖 因为Sno →Sdept成立,且Sno是(Sno,Sanme)的真子集。

传递函数依赖:在R(U)中,如果X→Y,(Y \nsubseteqX) ,YX, Y→Z,Z不属于Y, 则称Z对X传递函数依赖。

例:在关系Std(Sno, Sdept, Mname)中,有:   Sno → Sdept,Sdept → Mname 

 Mname传递函数依赖于Sno。

判断是第几范式的逻辑图

FD(functional dependency)表示函数依赖,Y是Yes,N是No

一、假设有关系模式R(A,B,C,D,E),如下函数依赖集F成立:A→BC,CD→E,B→D,E→A

1、如果将模式R分解为:R1(A,B,C)与R2(A,D,E)。证明该分解是无损分解。

2、给出模式R的一个无损连接的BCNF分解。

3、给出模式R的一个无损连接并保持依赖的3NF分解。

4、证明模式R的如下分解不是无损分解:(A,B,C)(C,D,E)

答案:

1、如果R1∩R2→ R1或R1 n R2→ R2,则一个分解{R1, R2}是一个无损连接分解。

设R1=(A, B, C), R2 =(A, D, E), R1 ∩ R2 = A。因为A→BC => A→ABC,即R1 ∩ R2→R1,因此该分解是无损连接分解。

2、R的候选码是A、E、CD、BC。

B→D中B不是R的超码,因此,R不是BCNF。

根据BCNF分解算法,将R分解为R1(B,D)和R2(A,B,C,E)。

R1上的函数依赖F1={B→D},R1满足BCNF。

R2上的函数依赖F2={A→BCE,E→ABC,BC→AE},R2满足BCNF。

最后,R的BCNF分解为:R1(B,D)与R2(A,B,C,E)。

3、F的正则覆盖Fc={A→BC,CD→E,B→D,E→>A}

R的候选码是A、E、CD、BC。

根据3NF分解算法,将R分解:

A→BC =>  R1=(A, B, C),

CD→E =>  R2=(C, D, E),

B→D  =>  R3=(B, D),

E→A  =>  R4=(E,A),

R1...R4中已经包含了R的候选码,

因此,R的3NF分解为:R1(A,B,C),R2(C,D,E),R3(B,D),R4(A,E)。

4、如果R1∩R2→ R1或R1 ∩ R2→ R2,则一个分解{R1, R2}是一个无损连接分解。

设R1=(A,B,C),R2 =(C,D,E), R1 ∩ R2 = C。因C→BC与C→DE均不满足,即R1 ∩ R2→R1或R1 n R2→ R2均不满足,因此该分解不是无损连接分解。

二、考虑如下关系模式R(A,B.C.D,E,F)上的函数依赖集F:{A→BCD,BC→DE,B→D,D→A}

  1. 计算B的闭包。
  2. (使用Armstrong公理)证明AF是超码。
  3. 计算上述函数依赖集F的正则覆盖;给出你的推导的步骤并解释。
  4. 基于正则覆盖,给出R的一个3NF分解。
  5. 利用原始的函数依赖集,给出R的一个BCNF分解。
  6. 你能否利用正则覆盖得到与上面的R相同的BCNF分解?

答案:

1、设 result=B;

由于B->D,故result=B∪D=BD;

由于D->A,故result=BD∪A=ABD;

由于A->BCD,故result=ABD∪BCD=ABCD;

由于BC->DE,故result=ABCD∪DE=ABCDE;

最终结果:B的闭包为ABCDE。

2、由于A->BCD,故A->ABCD(增补率,两边增补A)

由于BC->DE,故ABCD->ABCDE(增补率,两边增补ABCD)

因此A->ABCDE(传递率)

因此AF->ABCDEF(增补率,两边增补F)

因为AF可以推出所有属性,即AF的闭包包含所有属性,故AF是超码。

3、首先观察可知无左侧元素相同的可合并的函数依赖,因此查看无关属性。

由于B->D,因此在A->BCD和BC->DE中D均为无关属性(A->B,B->D,故A->D,因此A->BC结合A->D可以推出A->BCD;B->D故BC->D,因此BC->E结合BC->D可以说明BC->DE;因此D为无关属性),因此式子可以简化为:

A->BC BC->E B->D D->A

由于B->D,D->A,A->BC,因此B->C,因此BC->E中C为无关属性,因此可简化为:

A->BC B->E B->D D->A

左侧为B的有两项,可合并:

A->BC B->DE D->A

发现当前无无关属性,因此此时即为F的正则覆盖。

4、由于正则覆盖中没有多余的函数依赖,因此属性集是正则覆盖中其他函数依赖组成的子集,因此这里的三个函数依赖都有自己的关系:R1(A,B,C) R2(B,D,E) R3(D,A) 然后我们发现属性F并不在其中,因为AF是超码且上述的关系中并没有原关系的超码,因此需要添加 R4(A,F)

因此R的一个3NF分解为:R1(A,B,C) R2(B,D,E) R3(D,A) R4(A,F)。

5、start: R={A,B,C,D,E,F}

由于A->BCD但A不是超码,故R不满足BCNF,进行分解:

step1: R= R1(A, B, C, D),R2(A, E, F)

由于A->E是F+中的函数依赖,因此R2不满足BCNF,进行分解

step2: R=R1(A, B, C, D),R2(A, F),R3(A, E)

检验可得现在均符合BCNF。

6、若想通过正则覆盖得到与上面R相同的BCNF分解,直接进行BCNF分解是不行的,需要通过从正则覆盖推断出原始函数依赖并将其进行BCNF分解才能够得到相同的BCNF分解。

三、设有关系R和函数依赖F: R(A,B,C,D,E),F = { ABC→DE,BC→D,D→E }。

试求下列问题:

(1)关系R的侯选码是什么?R属于第几范式?并说明理由。

(2)如果关系R不属于BCNF,请将关系R逐步分解为BCNF。

要求:写出达到每一级范式的分解过程,并指明消除什么类型的函数依赖。

答案:

(1)关系R的候选码是(A,B,C),R∈1NF,因为R中存在非主属性D,E对候选码(A,B,C)的部分函数依赖。 

(2)首先消除部分函数依赖

将关系分解为:

R1(A,B,C) (A,B,C)为候选码,R1中不存在非平凡的函数依赖

R2(B,C,D,E),(B,C)为候选码,R2的函数依赖集为:F2={(B,C)→D,D→E}

在关系R2中存在非主属性E对候选码(B,C)的传递函数依赖,所以将R2进一步分解:

R21(B,C,D) ,(B,C)为候选码,

R21的函数依赖集为:F21 = { (B,C)→D }

R22(D,E) ,D为候选码,

R22的函数依赖集为:F22 = { D→E }

在R1中已不存在非平凡的函数依赖,在R21、R22关系模式中函数依赖的决定因素均为候选码,所以上述三个关系模式均是BCNF。

四、设有关系R和函数依赖F: R(W,X,Y,Z),F = { X→Z,WX→Y }。

试求下列问题:

(1)关系R属于第几范式?

R是1NF。侯选码为WX,则Y,Z为非主属性,又由于X→Z,因此F中存在非主属性对侯选码的部分函数依赖。

(2)如果关系R不属于BCNF,请将关系R逐步分解为BCNF。

要求:写出达到每一级范式的分解过程,并指明消除什么类型的函数依赖。

 将关系分解为:

R1(W,X,Y),F1 = { WX→Y }

R2(X,Z),F2 = { X→Z }

消除了非主属性对码的部分函数依赖。

F1和F2中的函数依赖都是非平凡的,并且决定因素是候选码,所以上述关系模式是BCNF。

  • 20
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值