🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀数据库💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光
目录
前言
练习题
题型一:判断关系模式属于第几范式(在BCNF内判断)
题型二:求最小依赖集(正则覆盖)
题型三:求闭包(求属性闭包)
题型四:求候选键
题型五:分解关系R为BCNF,且具有无损连接性
题型六:分解关系R为3NF,且具有无损连接性和保持函数依赖
分解综合题
1. R(U, F), U = {A, B, C, D}, F = {AB → C, C → D, D → A}
前言
本系列的重点是大学本科课程《数据库系统概念》。总结数据库学习中的各类知识点,并且对各类数据库考试中可能遇到的题型和对应的解法做总结归纳。在自我复习的同时也将这份心得带给大家,希望能对大家的数据库学习提供帮助~~
练习题
题型一:判断关系模式属于第几范式(在BCNF内判断)
题解模板:
- 根据候选码快速判断法确定候选码
- 从高级范式到低级范式,根据各个范式定义确定(总结性定义,非概念性定义)
BCNF:平凡依赖/左边属性集a是超码
3NF:平凡依赖/左边属性集a是超码/b-a属于候选码
2NF:非主属性完全依赖于候选码
(1) R(U, F), U = {X, Y, Z}, F = {XY → Z}
候选码:XY
根据BCNF定义(平凡依赖或左边a是候选码)。由于XY是候选码,所以是BCNF范式
(2) R(U, F), U = {X, Y, Z}, F = {Y → Z, XZ → Y}
候选码:(XZ)/(XY)
根据3NF定义(平凡依赖或左边a是候选码或b-a属于候选码)。由于Z-Y=Z属于候选码;XZ是候选码,所以是3NF范式
(3) R(U, F), U = {X, Y, Z}, F = {Y → Z, Y → X, X → YZ}
候选码:X、Y
根据BCNF定义(平凡依赖或左边a是候选码)。由于X、Y都是候选码,所以是BCNF范式
(4) R(U, F), U = {X, Y, Z}, F = {X → Y, X → Z}
候选码:X
根据BCNF定义(平凡依赖或左边a是候选码)。由于X是候选码,所以是BCNF范式
(5) R(U, F), U = {W, X, Y, Z}, F = {X → Z, WX → Y}
候选码:XW
BCNF由于X不满足;3NF由于Z不属于候选码不满足;
根据2NF定义(非主属性完全依赖主属性):由于Z是非主属性但是依赖X,是部分依赖主属性。所以仅是1NF
(6) R(U, F), U = {A, B, C, D, E}, F = {AB → CE, E → AB, C → D}
候选码:E、AB(候选码是:超码中任何子集都不能覆盖所有元素的超码)
根据2NF定义(非主属性完全依赖主属性):由于C完全依赖AB;D完全依赖于C也就是完全依赖于AB(这里的完全依赖是在F+中满足即可)。所有是2NF
题型二:求最小依赖集(正则覆盖)
算法:
1、合并
2、将依赖右边属性单一化
3、消除左边的无关属性(消除后判断新的函数依赖r是否正确,即r能不能由F导出)
4、合并
5、消除右边的无关属性
例:设有依赖集:F={AB→C,C→A,BC→D,ACD→B,D→EG,BE→C,CG→BD,CE→AG},计算与其等价的最小依赖集。
解:
1、判断左边的属性都不相同,因此不能合并
2、将依赖右边属性单一化:
F1={AB→C,C→A,BC→D,ACD→B,D→E,D→G,BE→C,CG→B,CG→D,CE→A,CE→G }
3、消除F1中左边无关属性:
由于C→A故E是多余的;对于ACD→B,由于(CD)+=ABCEDG,故A是多余的。删除依赖左部多余的依赖后:
F2={AB→C,C→A,BC→D,CD→B,D→E,D→G,BE→C,CG→B,CG→D,CE→G }
检查左边没有无关属性
4、合并
F3={AB→C,C→A,BC→D,CD→B,D→EG,BE→C,CG→BD,CE→G }
5、 消除F3中右边无关属性:
对于CG→B,由于(CG)+=ABCEDG,故CG→B是多余的。删除依赖左部多余的依赖后:
F4={AB→C,C→A,BC→D,CD→B,D→EG,BE→C,CG→D,CE→G }
检查右边没有无关属性
6、左右边都没有无关属性,正则覆盖求解结束
题型三:求闭包(求属性闭包)
求属性闭包流程:
1、拿属性集A,逐一放到函数依赖a->b中,如果a∈A则新增b到属性集A中
2、不停重复放到函数依赖中,直到一轮后属性集A不再变化
例:关系模式R(U,F),其中U={A,B,C,D,E,I},F={A→D,AB→E,BI→E,CD→I,E→C},计算(AE)+。
解:
1、A→D扩充AE变为ADE
2、E→C扩充ADE变为ACDE
3、CD→I扩充ACDE变为ACDEI
4、走一轮发现ACDEI不再变化,因此(AE)+=ACDEI
题型四:求候选键
快速求解理论:
对于给定的关系R(A1,A2,…, An)和函数依赖集F,可将其属性分为四类:
L类:仅出现在F的函数依赖左部的属性;
R类:仅出现在F的函数依赖右部的属性;
N类:在F的函数依赖左右两边均未出现的属性;
LR类:在F的函数依赖左右两边均出现的属性。
定理1 对于给定的关系模式R及其函数依赖集F,若X(X属于R)是L类属性,则X必为R的任一候选关键字的成员。
定理2 对于给定的关系模式R及其函数依赖集F,若X(X属于R)是R类属性,则X不在任何候选关键字中。
定理 3 对于给定的关系模式R及其函数依赖集F,若X(X属于R)是N类属性,则X必为R的任一候选关键字的成员。
利用快速理论求解步骤:
1、找L类、N类属性加为候选码A
2、求A的闭包看是否全覆盖属性
3、如果覆盖结束;如果不覆盖则继续4
4、找R类属性,将其排除
5、找剩下的属性,逐一加入A中得到A‘,看是否是候选码
例1:关系模式R(U,F),其中U={A,B,C,D},F={A→B,C→D},试求此关系的候选键。解:根据理论得AC为候选码
例2 设有关系模式R(A,B,C,D),其函数依赖集F={D→B,B→D,AD→B,AC→D},求R的所有候选键。解:根据理论得AC,(AC)+=ACDB,因此AC是候选码
题型五:分解关系R为BCNF,且具有无损连接性
BCNF分解不能做到一定保持函数依赖,但是可以保证无损连接
流程:
1、找到result中不符合BCNF的关系模式Ri
2、找到Ri中的非平凡函数依赖a->b,其中a不是超码
3、利用(result-Ri)∪(Ri-b)∪(a,b),将不满足的Ri分解为两个可能满足的关系模式(Ri-b是指在关系模式Ri中去掉和属性b有关的所有函数依赖,但是属性并不去除,同时要重新找新的函数依赖,这个依赖是在闭包里的)
设关系模式R(A,B,C,D,E),FD={A->D, E->D, D->B, BC->D, EC->A}。试求:
(1)R的候选码
(2)R所属的范式
(3)将R分解为BCNF,且具有无损连接性
解:
(1)候选码为:CE,非主属性:ABD
(2)判断2NF:A依赖CE;B依赖D依赖A依赖CE;D依赖A依赖CE。因此满足2NF(这个依赖是在闭包中满足)
(3)
第一次选择A->D函数依赖:得到R1(ABCE,EC->A,E->B);R2(AD,A->D)
第二次选择E->B函数依赖:得到R1(ACE,EC->A);R2(AD,A->D);R3(BE,E->B)
题型六:分解关系R为3NF,且具有无损连接性和保持函数依赖
3NF合成算法流程:
- 求出F的正则覆盖Fc
- 根据Fc的每个函数依赖分解关系模式R
- 判断是否有其中一个R包含候选码
- 如果没有则增加一个仅包含候选码的关系模式Ri
TEACHER(教师编号,教师姓名,电话,所在部门,借阅图书编号,书名,借书日期,还书日期,备注)
(1)教师编号是候选码吗?说明理由
(2)该关系模式的主码是什么?
(3)该关系模式是否存在部分函数依赖?如果存在,请写出至少两个?
(4)该关系模式满足第几范式?
(5)将该关系模式分解为3NF。
解:
(1)教师编号不是候选码。
(2)假定对任一本书一个人一天只能借一次,则主码为:
教师编号,借阅图书编号,借书日期;
非主属性为:教师姓名、电话、所在部门、书名、还书日期、备注
(3)存在。
(教师编号,借阅图书编号,借书日期)->教师姓名
(教师编号,借阅图书编号,借书日期)->教师电话
(教师编号,借阅图书编号,借书日期)->所在部门
(教师编号,借阅图书编号,借书日期)->书名
(4)因为存在非主属性对于码的部分函数依赖,所以,未达到二范式,只属于一范式。
(5)
教师(教师编号,教师姓名,电话,所在部门)
图书(图书编号,图书名)
借阅(教师编号,图书编号,借书日期, 还书日期,备注)
分解综合题
将给定的关系模式分解成满足BCNF(Boyce-Codd Normal Form)和3NF(Third Normal Form)的关系模式
1. R(U, F), U = {A, B, C, D}, F = {AB → C, C → D, D → A}
候选码:AB、CB、BD
BCNF:
1、选C → D分解得到R1(ABC,AB → C)R2(CD,C → D)
2、选C→A分解得到R1(BC)R2(CD,C → D)R3(AC,C → A)
3NF:
属于3NF不用分解
2. R(U, F), U = {A, B, C, D}, F = {B → C, B → D}
候选码:AB
BCNF:
1、选B → C分解得到R1(ABD,B → D)R2(BC,B → C)
2、选B → D分解得到R1(AB)R2(BC,B → C)R3(BD,B → D)
3NF:
1、Fc={B->CD}
2、R1(BCD,B->CD)R2(AB)
3. R(U, F), U = {A, B, C, D}, F = {AB → C, BC → D, CD → A, AD → B}
候选码:AB、BC、CD、AD
BCNF:
属于BCNF不用分解
3NF:
属于3NF不用分解
4. R(U, F), U = {A, B, C, D, E}, F = {AB → C, DE → C, B → D}
候选码:ABE
BCNF:
1、选AB → C分解得到R1(ABDE,B → D)R2(ABC,AB → C)
2、选B → D分解得到R1(ABE)R2(BD,B → D)R3(ABC,AB → C)
3NF:
1、Fc=F
2、分解为{(ABE)、(ABC)、(CDE)、(BD)}
5. R(U, F), U = {A, B, C, D, E, F}, F = {A → B, C → DF, AC → E, D → F}
候选码:AC
BCNF:
1、选A → B分解得到R1(ACDEF,C → DF, AC → E, D → F)R2(AB,A → B)
2、选C → DF分解得到R1(ACE,AC → E)R2(AB,A → B)R3(CDF,C → DF,D → F)
3、选D → F分解得到R1(ACE,AC → E)R2(AB,A → B)R3(CD)R4(DF,D → F)
3NF:
1、Fc={A → B, C → D,AC → E, D → F}
2、分解为{(AB)(CD)(ACE)(DF)}
总结
本文的所有知识点、图片均来自《数据库系统概念》(黑宝书)、山东大学李晖老师PPT。不可用于商业用途转发。