1、设有关系模式R(A,B,C),其关系r如图:
(1)试判断下列FD在关系r中是否成立?
A→B BC→A B→A
假设A→B成立,
则A决定B,
B依赖A
按照函数y=F(x)关系
那么A为x
B为y
可以有多个不同A对应同一个B
但是不能有多个不同B对应同一个A
从表中可看出
没有同一个A对应多个不同B
所以成立
同理:
我们可以继续推导:
假设BC→A成立
则BC决定A
而A依赖于BC,
按照函数y=f(x)关系
把BC看作一个整体
那么BC为x
A为y
可以有多个不同BC对应同一个A
但是不能有多个不同A对应同一个BC
从表中可看出
有一个BC(x)对应多个A(y)
所以不成立
同理:B→A
B为X而A为Y
则:
x=2时y=1或4
所以不成立
(2)根据关系r可以判定哪些FD在关系模式R上不成立?
这里的FD指的是函数依赖英文缩写
那么这里我们找到依赖关系就行
从1问中我们已经推理出3种,这里列数比较少只进行简单的排列组合,
A->B 成立,B->A不成立
AB->C 成立,C->AB 不成立
AC->B 成立,B->AC 不成立
A->C 成立,C->A 不成立
B->C成立,C->B 不成立
(还有一点多讲一句:
ABC->A
你可以看成y=x来理解
那么无论是ABC->A还是A->ABC都成立
那这种叫做平凡函数依赖
AC->B成立的叫做非平凡函数依赖,B不再AC里面。
那么完全函数依赖与部分函数依赖又是什么玩意?
举个例子:
假设AB为主键 有函数关系AB->C那么C必须全部依赖于AB 即 C单独依赖B不行
即B-/->C
所以你需要把C列的第一行改为其他不为3的数比如4
A B C
1 2 4
4 2 3
5 3 3
那么这就是完全依赖
那么部分依赖
A B C
1 2 3
4 2 3
5 3 3
我改回去
C单独依赖其中一个也行
这种叫做部分依赖)
A B C |
1 2 3 4 2 3 5 3 3 |
2、设有关系模式R(A,B,C,D),R上成立的FD集F={AB→CD,A→D}
(1)试说明R不是2NF的理由。
第一步判断唯一候选码
首先我们把集合分为左边部分和右边部分方便我们用函数关系 y= f(x) 来判断
左边L:L=AB
右边R:R=CD
两边都在LR:LR=空
两边都不在N:N=空
x: LUN
所以
AB的闭包为 全集U
所以AB为唯一候选码
非主属性为CD
主属性为:AB
由于A为AB的真子集
D为CD非主属性中的真子集
那么
D对于主属性存在局部依赖
(2)试把R分解成2NF的模式集。
采用投影分解法
R1(A,B,C)
R2(A,D)
R1,R2都是2NF
3、设有关系模式R(A,B,C),R上成立的FD集F={C→B,B→A}
(1)试说明R不是3NF的理由。
第三范式是在第二范式的基础上消除传递依赖
那么可以看到
因为C→B,B→A
B---/--->C
所以有传递依赖
即C--->A
(2)试把R分解成3NF的模式集。
最小函数依赖集
定义
如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集,亦称为最小依赖集或最小覆盖。
(1)、F中任一函数依赖右部仅含有一个属性。
(2)、F中不存在这样的函数依赖 X→ A,使得F与F-{X→A} 等价。
(3)、F中不存在这样的函数依赖X→A,X有真子集Z使得F-{X→A}⋃{Z→A} 与F等价。
解释
以上定义翻译成大白话就是,一个函数依赖集F要想称为最小函数依赖集,要满足以下三点:
1、F中任一函数依赖的右边只有一个属性。
2、F中不存在这样的函数依赖:从现有的函数依赖集中删除一个函数依赖X→A,删除后所得的函数依赖集与原来的函数依赖集等价,这样的函数依赖是不允许存在的。
3、F中不存在这样的函数依赖:假设函数依赖集中存在AB→Y,现对该依赖的左部进行化简,即删除A,得B→Y;或删除B,得A→Y,若经过化简后的函数依赖集与没有化简前的函数依赖集等价,那么这样的函数依赖是不允许存在的。
F={C->B,C->A}
第一步求出F的最小函数依赖集
步骤:
1、先将右边都变成单属性
2、依赖集中不能出现冗余的函数依赖(重复的函数依赖)
3、左边没有多余的属性1.由于FD中没有右边的多属性比如(A->CD)要拆分成(A->C,A->D)所以省略
2.去掉重复的这里没有省略
3.左边没有多余的属性省略
(比如(A->B,AB->C)那么这里A->B多余了)
第二步把最小函数依赖集中左边相同的合并比如(A->B,A->C)合并后为(A->BC)
这里左边不同不用合并
R1(C,B);R2(C,A)
第三步求出候选码
候选码定理
(1)若X是L类属性,则X必为R的候选码成员;若X的闭包包含全部属性U,则X必为R的唯一候选码。
(2)若X是R类属性,则X不在任何候选码中。
(3)若X是N类属性,则X必为R的候选码成员。
(4)若X是L类和N类属性组成的属性集,且X的闭包包含U,则X是R的唯一候选码。
(5)若X是LR类属性,则X可能为R的任一候选码的成员,也可能不为R的任一候选码的成员。
1.首先找出L,R,N,LR四中属性分类
L:C
R:A
N:
LR:B候选码为C 且C决定B(如果都不决定就不是候选码)
第四步把候选码作为一个模式放入模式集
由于R1,R2中都有C那么
R的分解后的模式集合为
R1,R2
4、设有一个记录各个球队队员每场比赛进球数的关系模式
R(队员编号A,比赛场次B,进球数C,球队名D,队长名E)
如果规定每个队员统一编号,且只能属于一个球队;每个球队只有一个队长。
(1)试写出关系模式R的基本函数依赖FD和码
设队员编号A,比赛场次B,进球数C,球队名D,队长名E
FD为:队员编号-A>球队名D;球队名-D>队长名E;(队员编号A,比赛场次B)->进球数C
A->D,D->E,AB->C
L:队员编号,比赛场次
R:队长名,进球数
LR:球队名
(队员编号)+ = 队员编号,球队名,队长名
(队员编号,比赛场次)+=队员编号,比赛场次,球队名,进球数,队长名
(队员编号,球队名)+ =队员编号,球队名,队长名
(比赛场次,球队名)+ =比赛场次,球队名,队长名
故根据推论关系R有唯一的候选码(队员编号,比赛场次)此时码的个数大于1 主码可选(队员编号,比赛场次)
找出候选码
码为(队员编号,比赛场次)。
(2)说明R不是2NF的理由,把R分解成2NF的模式集。
候选码(队员编号,比赛场次) 因为其真子集 队员编号->球队名;(队员编号,比赛场次)->球队名。存在部分函数依赖 故不满足2NF。
因为主码(队员编号,比赛场次) 真子集:队员编号->球队名;此时R1(队员编号,球队名),又因为球队名属于R1且->队长名,故R1(队员编号,球队名,队长名),比赛场次->null。
故2NF模式为
R1(队员编号,球队名,队长名)
R2(队员编号,比赛场次,进球数)(说明:R减去真子集中的非主属性)
(3)进而把R分解成3NF的模式集,并说明理由。
设队员编号为A,球队名为B,队长名为C,比赛次数为D,进球数为E
且根据Q2 有R1{A,D,E};R2{A,B,C}
则有关系R(A,B,C,D,E) 且函数依赖集F为(A->D,D->E,AB->C)
求F的最小依赖集步骤:
右边都为单属性,跳过
左边AB->C是多属性 去除A,则新函数依赖集H为(A->D,D->E,B->C) B(F+)=B,不包含C 故A不能去
去除B,则新函数依赖集H为(A->D,D->E,A->C) A(F+)= ADE,不包含C 故B不能去
去掉AB->C,新函数依赖集J为(A->D,D->E) AB(J+)=ADBE 不包含C 故不能去除AB->
因此得到最小函数依赖集F为(A->D,D->E,AB->C) ,故可分解为(A,D),(D,E),(A,B,C)
三者之间不存在包含关系,故可分解为R1{队员编号,球队名};R2{球队名,队长名};R3{队员编号,比赛场次,进球次数}
故3NF模式为:
R1{队员编号,球队名}
R2{球队名,队长名}
R3{队员编号,比赛场次,进球次数}
5、教材P202第2题
1. 关系模式:
学生: S(Sno, Sname, Sbirth, Dept, Class, Rno)
班级: C(Class, Pname, Dept, Cnum, Cyear)
系: D(Dept, Dno, Office, Dnum)
学会: M(Mname, Myear, Maddr, Mnum)
求最小函数依赖集那就不得不谈到闭包
闭包就是由一个属性直接或间接推导出的所有属性的集合,例如: f={a->b,b->c,a->d,e->f}
由a可直接得到b和d,间接得到c,则a的闭包就是{a,b,c,d}
通过闭包我们就可以在拆分F时判断依赖是否冗余
从上面例子a->b在a的闭包中所以保留
如果缺少那么a便不能推出b
2.最小函数依赖集
(1) 学生
最小函数依赖集:
Sno→Sname,Sno→Sbith,Sno→Class,Class→Dept,Dept→Rno
传递函数依赖:
Sno与Rno之间存在着传递函数依赖。
因为Sno→Dept,Dept→Rno
Sno与Dept之间存在着传递函数依赖。
因为Sno→Class,Class→Dept
(2) 班级
最小函数依赖集:
Class→Pname,Class→Cnum,Class→Cyear,Pname→Dept.
传递函数依赖
Class与Dept之间存在着传递函数依赖。
因为Class →Pname , Pname→Dept
(3) 系
最小函数依赖集:Dept →Dno,Dno→Dept,Dno →Office,Dno→Dnum
传递函数依赖:无
(4) 学会
最小函数依赖集:Mname →Myear,Mname→ Maddr,Mname→Mnum.
传递函数依赖:无
3.候选码,外部码说白了就是外键,全码就是所有的属性共同构成一个候选码
(1) 学生
候选码: Sno
外部码: Dept ,Class
全码:无
(2) 班级
候选码: Class
外部码: Dept
全码:无
(3) 系
候选码: Dept或Dno
外部码:无
全码:无
(4) 学会
候选码: Mame
外部码:无
全码:无