数据库规范化理论习题.doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
规范化理论习题
1.解释下列名词:
函数依赖、部分函数依赖、完全函数依赖、传递函数依赖、候选关键字、主关键字、全关键字、INF、2NF、3NF、BCNF、多值依赖、4NF、连接依赖、5NF、最小函数依赖集、
无损分解
函数依赖:FD(function dependency),设有关系模式R(U),X,Y是U的子集,r是R 的任一具体关系,如果对r的任意两个元组tl,t2,由tl[X]=t2[X]导致tl[Y]=t2[Y],则称X函数决定Y,或Y阑数依赖于X,记为X—Y。
X^Y为模式R的一个阑数依赖。
部分函数依赖:即局部依赖,对于一个函数依赖W->A,如果存在X W(X包含于W)有X->A成立,那么称W->A是局部依赖,否则称W->A为完全依赖。
完全函数依赖:见上。
传递函数依赖:在关系模式屮,如果Y->X,X->A,且X Y (X不决定Y),A X (A不属于X),那么称Y^A是传递依赖。
候选关键字:设K为关系模式R (U, F)中的属性或属性集合。
若K-^U,则K称为
R的一个候选码(Candidate Key),也称作为候选关键字或码。
主关键字:若关系模式R有多个候选码,则选定其巾一个作力主关键字(Primary Key),有时也称作为主码。
全关键字:若关系模式R整个属性组都是码,称为全关键字(All Key)或全码。
1NF:第一范式。
如果关系模式R的所有属性的值域中每一个值都是不可再分解的值,则称R是属于第一范式模式。
如果某个数据库模式都是第一范式的,则称该数据库存模式属于第一范式的数据库模式。
第一范式的模式要求属性值不可再分裂成更小部分,即属性项不能是属性组合和组属性组成。
2NF:第二范式。
如果关系模式R为第一范式,并且R屮每一个非主属性完全函数依赖于R的某个候选键,则称是第二范式模式;如果某个数据库模式屮每个关系模式都是第二范式的,则称该数据库模式属于第二范式的数据库模式。
(注:如果A是关系模式R的候选键的一个属性,则称A是R的主属性,否则称A是R的非主属性。
)。
3NF:第三范式。
如果关系模式R是第二范式,且每个非主属性都不传递依赖于R的候选键,则称R是第三范式的模式。
如果某个数据库模式屮的每个关系模式都是第三范式, 则称为3NF的数据库模式。
BCNF: BC范式。
如果关系模式R是第一范式,且每个属性都不传递依赖于R的候选键,那么称R是BCNF的模式。
多值依赖:没R(U)是属性集U上的一个关系模式,X,Y, Z是U的子集,并且Z=U-X-Y, 用x,y,z分别代表属性集X,Y,Z的值,只要r是R的关系,r屮存在元组(x,yl,zl)和(x,y2,z2)时,就也存在元纟Il(x,yl,z2)和(x,y2,zl),那么称多值依赖(MultiValued Dependency MVD) X->->Y在关系模式R中成立。
4NF:第卩4范式。
设R是一个关系模式,D是R上的多值依赖集合。
如果D屮成立非平凡多值依赖X——Y时,X必是R的超键,那么称R是第四范式的模式。
连接依赖:关系模式R(U)屮,U是全体属性集,X, Y,…,Z是U的子集,当且仅当R 是由其在X, Y,…,Z上投影的自然连接组成时,称R满足对X, Y,…,Z的连接依赖。
记为JD (X,Y,…,Z)。
5NF:关于模式R中,当且仅当R中每个连接依赖均为R的候选码所蕴涵时,称R属
于5NFo
最小函数依赖集:如果函数集合F满足以下三个条件:(1)F中每个函数依赖的右部都是单属性;(2)F巾的任一函数依赖X->A,其F-{X->A}与F是不等价的;(3)F巾的任一函数依赖X^A, Z为X的子集,(F-{X^A}) U{Z->A}与F不等价。
则称F力最小函数依赖集合,记为Fmino
无损分解:设R是一个关系模式,F是R上的一个依赖集,R分解为关系模式的集合P = (R1(U1),R2(U2),…,Rn(Un)}。
如果对于R中满足F的每一个关系r,都有r=riRl(r)><3riR2(r)…><]nRn(r)
则称分解相对于F是无损连接分解(lossingless join decomposition),简称力无损分解,否则就称为有损分解(lossy decomposition)。
2.现要建立关于系、学生、班级、学会等信息的一个关系数据库。
语义为:一个系有若干专业,每个专业每年只招一个班,每个班有若干学生,一个系的学生住在同一个宿舍区,每个学生可参加若干学会,每个学会有若干学生。
描述学生的属性有:学号、姓名、出生日期、系名、班号、宿舍区;
描述班级的属性有:班号、专业名、系名、人数、入校年份;
描述系的属性有:系名、系号、系办公室地点、人数;
描述学会的属性有:学会名、成立年份、地点、人数、学生参加某会有一个入会年份。
(1)请写出关系模式。
⑵写出每个关系模式的最小函数依赖集,指出是否存在传递依赖,在函数依赖左部是多属性的情况下,讨论函数依赖是完全依赖,还是部分依赖。
(3)指出各个关系模式的候选关键字、外部关键字,有没有全关键字。
解:各关系模式如下:
学生(学号,姓名,出生年月,系名,班级号,宿舍区)
班级(班级号,专业名,系名,人数,入校年份)
系(系名,系号,系办公地点,人数)
社团(社团名,成立年份,地点,人数)
加入社团(社团名,学号,学生参加社团的年份)
学生(学号,姓名,出生年月,系名,班级号,宿舍区)
•“学生”关系的最小函数依赖集为:
Fmin={学号—姓名,学号—班级号,学号一>出生年月,学号一>系名,系名一>宿舍区}•以上关系模式中存在传递函数依赖,如:学号—系名,系名—宿舍区
•候选键是学号,外部键是班级号,系名。
注意:在关系模式巾,如果Y->X,X->A,且X Y (X不决定Y),A不属于X,那么称Y—A是传递依赖。
班级(班级号,专业名,系名,人数,入校年份)
•“班级”关系的最小函数依赖集为:
Fmin=«系名,专业名班级号,班级号一>人数,班级号->入校年份,班级号—系名,班级号一> 专业名}
(假没没有相同的系,不同系中专业名可以相同)
•以上关系模式屮不存在传递函数依赖。
•“(系名,专业名)—班级号”是完全函数依赖。
•候选键是(系名,专业名),班级号,外部键是系名。
系(系名,系号,系办公地点,人数)
•“系”关系的最小函数依赖集为:Fmin={系号—系名,系名—系办公地点,系名—人数,系名一> 系号}
•以上关系模式中不存在传递函数依赖
•候选键是系名,系号
社团(社团名,成立年份,地点,人数)
•“社团”关系的最小函数依赖集为:Fmin=•{社团名—成立年份,社团名—地点,社团名—人数}
•以上关系模式中不存在传递函数依赖。
•候选键是社团名
加入社团(社团名,学号,学生参加社团的年份)
•“加入社团”关系的最小函数依赖集为:Fmin={(社团名,学号)一学生参加社团的年份} •“(社团名,学号)一>学生参加社团的年份’’是完全函数依赖。
•以上关系模式中不存在传递函数依赖。
•候选键是(社团名,学号)。
3.设关系模式R(A,B, C, D),函数依赖集F={A->C,C一A,B-*AC, D—AC, BD—A}。
1)求出R的候选码;
2)求出F的最小函数依赖集;
3)将R分解为3NF,使其既具有无损连接性又具有函数依赖保持性。
解:(1)根据函数依赖可得:
属性B、D、BD为L类(仅山现在F的函数依赖左部)。
且在函数依赖的左部和右部均未出现的属性为0。
根据定理:对于给定的关系模式R及其函数依赖集F,若X(XeR)是L类属性,则X 必为R 的任一候选码的成员。
因此属性B、D必为候选码的成员。
且它们的闭包为:
B/=ABC,D /=ACD,BD F+=ABCD
再根据推论:对于给定的关系模式R及其函数依赖集F,若X(XeR)是L类属性,且X /包含了R的全部属性,则X必为R的唯一候选码。
故BD是R的唯一候选码。
所以R的候选码为BD。
(2)将F屮所有函数依赖的依赖因素写成单属性集形式:
F={A->C, C—A, B->A, B->C, D->A, D-*C, BD->A}
F中的B—C可以从B—A和A->C推导出来,B—C是冗余的,删掉B—C可得:F={A-*C, C-A, B-*A, D-A, D~*C, BD-*A}
F中的D->C可以从D->A和A->C推导出來,D—C是冗余的,删掉D~>C可得:F={A-C, C—A, B—A, D-A, BD—A}
F屮的BD—A可以从B->A和D->A推导出来,是冗余的,删掉BD—A可得:F={A-C, C 一A, B-A, D-A}
所以F的最小函数依赖集Fmin={A—C,C-A, B-A, D—A}。
(3)由于R中的所有属性均在Fmin中都出现,对F按具有相同左部的原则分为:R1=AC,
R2=BA, R3=DAo 其中,U1={A, C}, U2={B, A}, U3={D, A}, Fl=Fl = nUl= {A 一C}, F2 = nu2= {B—A},F3 = nU3= {D->A}。
所以P ={R1(AC),R2(BA),R3(DA)}。
4.设关系模式R(A,B,C, D, E, F),函数依赖集F= {A B~*E, BC-D, BE-*C, CD-*
B, CE—AF, CF—BD, C—A, D-*EF},求F的最小函数依赖集。
解:①利用分解规则,将所有的函数依赖变成右边都是单个属性的函数依赖,得F为: F ={AB-*E,BC-*D,BE-*C,CD~*B,CE~*A,CE~*F,CF-*B, CF-*D, C-A, D-*E, D~*F} ②去掉F中多余的闲数依赖
A.设AB—E为冗余的函数依赖,则从F中去掉AB—E,得:
Fl={ BC-*D, BE-*C, CD-*B, CE~*A, CE-*F, C卜B,CF-*D, C~*A, D-*E, D-*F}
计算(AB)F1+:
设X(O)=AB
计算X(l):扫描FI中各个蚋数依赖,找到左部为AB或AB子集的函数依赖,因为找不到这样的函数依赖。
故有X(1)=X(O)=AB,算法终止。
(AB)F1+=AB不包含E,故AB->E*是冗余的函数依赖,不能从F屮去掉。
即:
Fl={ AB-*E, BC-*D, BE-*C, CD-*B, CE,A, CE-*F, CF~*B,CF-*D, C~*A, D-*E, D-*F}
B.设BC—D为冗余的函数依赖,则从FI中去掉BC—D,得:
F2={AB—E,BE—C,CD— B,CE—A,CE—F,CF-*B, CF — D, C-*A, D—E,D—F}
计算(BC)F2+:
设X(O)=BC
计©X(l):扫描F2中的各个函数依赖,找到左部为BC或BC子集的函数依赖,得到一个C-A 函数依赖。
故有X(1)=X(O)U A=BCA=ABC。
计算X(2):扫描F2中的各个函数依赖,找到左部为ABC或ABC子集的函数依赖,得到一个AB—E函数依赖。
故有X(2)=X(1)UE=ABCE。
计算X(3):扫描F2屮的各个函数依赖,找到左部为ABCE或ABCE子集的函数依赖,得到三个BE->C,CE—A 和CE-F 函数依赖。
故有X(3)=X(2) U CAF=ABCEF。
计算X(4):扫描F2巾的各个函数依赖,找到左部力ABCEF或ABCEF子集的函数依赖,得到二个CF—B 和CF->D 函数依赖。
故有X(3)=X(2)UBD=ABCDEF。
因为X(3)=U, 算法终止。
(BC)F2+=ABCDEF包含D,故BC—D是冗余的函数依赖,从F1中去掉。
即:F2={AB-E, BE,C, CD~*B, CE-A, CE,F,CF,B,CF〜D, C〜A, D-E, D〜F}
C.设BE—C为冗余的函数依赖,从F2中去掉BE—C,得:
F3={AB—E, CD-*B, CE-*A, CE-*F, CF—B,CF-*D, C-A, D-*E, D-*F}
计算(BE)n+:
设X(O)=BE
计算X(l):扫描F3中的各个函数依赖,找到左部为BE或BE子集的函数依赖,因为找不到这样的函数依赖。
故有X(1)=X(O)=BE,算法终止。
(BE)F3+=BE不包含C,故BE—C不是冗余的函数依赖,不能从F2中去掉。
即:
F3={AB—E, BE—C,CD-B, CE-A, CE—F,CF—B,CF— D,C-A, D—E,D—F}
D.设CD—B为冗余的函数依赖,从F3中去掉CD->B,得:
F4={AB-E, BE,C, CE—A,CE-F, CF,B, CF~*D, C-A, D-E, D-F}
计算(CD)F4\
没X(O)=CD
计算X(l):扫描F4屮的各个函数依赖,找到左部为CD或CD子集的函数依赖,得到三个C—A, D-*E 和D->F 函数依赖。
故有X(1)=X(O) UAEF=ACDEF。
汁算X(2):扫描F4中的各个函数依赖,找到左部为ACDEF或ACDEF子集的函数依赖, 得
到四个CE-*A,CE-*F,CF-*B,CF-*D 函数依赖。
故有X(2)=X(1)U ABDF=ABCDEFo
因为X(2)=U,算法终止。
(CD) F/=ABCDEF包含B,故CD—B是冗余的函数依赖,从F3中去掉。
即:F4={AB,E, BE-C, CE—A, CE,F, CF-B, CF-D, C-A, D〜E, D-F}
E.设CE—A为冗余的函数依赖,从F4中去掉CE—A,得:
F5={AB-E, BE—C,CE—F,CF-*B, CF—D,C一A, D—E,D—F}
计算(CE)F5+:
设X(O)=CE
计算X(l):扫描F5中的各个函数依赖,找到左部为CE或CE子集的函数依赖,得到一个C-A函数依赖。
故有X(1)=X(O)U A=ACE。
计算X(2):扫描F5中的各个函数依赖,找到左部为ACE或ACE子集的函数依赖,得到一个CE—F函数依赖。
故有X(2)=X(1)UF=ACEF。
计算X(3):扫描F5屮的各个函数依赖,找到左部为ACEF或ACEF子集的函数依赖,得到二个CF—B 和CF-D 函数依赖。
故有X(3)=X(2) U BD=ABCDEF。
因为X(3)=U,
算法终止。
(CE) F5+=ABCDEF包含A,故CE—A是冗余的函数依赖,从F4中去掉。
即:
F5={AB—E, BE—C, CE—F, CF-B, CF-D, C-A, D-E, D-F}
F.设CE—F为冗余的函数依赖,从F5中去掉CE—F,得:
F6={AB〜E, BE-C, CF,B, CF-D, C^A, D-E, D-F}
计算(CE)F6+:
设X(O)=CE
计算X(l):扫描F6屮的各个函数依赖,找到左部为CE或CE子集的函数依赖,得到一个C—A 函数依赖。
故有X(1)=X(O)UA=ACE。
汁算X(2):扫描F6中的各个函数依赖,找到左部为ACE或ACE子集的函数依赖,因为找不到这样的函数依赖。
故有X(2)=X(1)=ACE,算法终止。
(CE) F6+=ACE不包含F,故CE—F不是冗余的函数依赖,不能从F5中去掉。
即:F6={AB—E,BE—C,CE—F,CF-B,CF-D, C一A,D—E,D—F}
G.设CF->B为冗余的函数依赖,从F6中去掉CF—B,得:
F7={AB,E, BE-*C, CE-*F, CF,D, C,A, D,E,D,F}
计算(CF)F/:
没X(O)=CF
计算X(l):扫描F7屮的各个函数依赖,找到左部为CF或CF子集的函数依赖,得到二个CF->D 和C-*A 函数依赖。
故有X(1)=X(O)U AD=ACDF。
U•算X(2):扫描F7中的各个函数依赖,找到左部为ACDF或ACDF子集的函数依赖,得到二个D->E和D-F函数依赖。
故有X(2)=X(1)UEF=ACDEF。
计算X(3):扫描F7中的各个函数依赖,找到左部为ACDEF或ACDEF子集的闲数依赖,得到一个CE—F函数依赖。
故有X(3)=X(2)UF=ACDEF=X(2),算法终止。
(CF) F7+=ACDEF不包含B,故CF->Bf是冗余的函数依赖,不能从F6中去掉。
即:F7={AB 〜E, BE-C, CE,F, CF^B, CF-D, C-A, D〜E, D-F}
H.设CF—D为冗余的函数依赖,从F7中去掉CF—D,得:
F8={AB-E, BE—C,CE—F,CF-*B, C-*A, D—E,D—F}
计算(CF)F
设X(O)=CF
计©X(lh扫描F8中的各个函数依赖,找到左部为CF或CF子集的函数依赖,得到二个CF—B 和C-A 函数依赖。
故有X(1)=X(O)U AB=ABCF。
计算X(2):扫描F8屮的各个函数依赖,找到左部为ABCF或ABCF子集的函数依赖,得到一个AB->E函数依赖。
故有X(2)=X(1)UE=ABCEF。
计算X(3):扫描F8中的各个函数依赖,找到左部为ABCEF或ABCEF子集的函数依赖,得到二个BE—C和CE—F函数依赖。
故有X(3)=X(2)UCF= ABCEF = X(2),算法终止。
(CF)F7+= ABCEF不包含D,故CF — D不是冗余的函数依赖,不能从F7中去掉。
即:F8={AB—E, BE—C,CE—F,CF-B, CF-D, C-A, D—E, D—F}
③去掉F8中各函数依赖左边多余的属性(只检查左部不是单个属性的函数依赖)
由于F8中各函数依赖左边无多余的属性,故:
Fmin={AB->E, BE-*C, CE-F, CF-*B, CF—D, C-A, D-E, D-F}
5.判断下而的关系模式是不是BCNF,为什么?
(1)任何一个二元关系。
(2)关系模式选课(学号,课程号,成缋),函数依赖集F={(学号,课程号)一成绩}。
⑶
关系模式R(A, B,C, D, E, F),函数依赖集F={A-*BC,BC—A, BCD-*EF, E
->C}0
解:(1)是BCNF。
二元关系屮或为全关键字,或为一个单属性候选关键字。
(2)是BCNF。
关系模式中只有一个候选关键字。
(3)不是BCNFo因为模式中存在候选关键字为AD、BCD和BE,显然C对AD 是部分依赖。
VU1AU2 = EU1-U2=AB U1AU2-*U1-U2={E->AB}={E->A, E—B}
U1AU2-*U1-U2EF+
/.该分解具备无损连接。
6.设关系模式R(B, 0,I, S,Q,D),函数依赖集F={S->D,I->S, IS—Q, B-*Q}。
(1)求出R的主码。
⑵把R分解为BCNF,且具有无损连接性。
解:(1)R的主关键字为IB0。
(2)Fmin= {S-D,卜S, I-*Q, B~*Q}
令P =BOISQD
①由于R的关键字为IBO,选择S—D分解得出:P={S1, S2}
其中:S1=SD, F1={S-*D}
S2=B0ISQ, F2={I-S,卜Q,
显然,S2不服从BCNF,需继续分解。
②对S2分解。
S2的关键字为IBO,选择I一S分解。
得出:P={S1, S3, S4}。
其中:S3=IS, F3={I-*S}
S4=B01Q, F4={I-*Q,
显然,S4不服从BCNF,还需继续分解。
③对S4分解。
S4的关键字为IBO,选择I—Q分解。
得出:P={S1, S3, S5, S6}
其中S5=IQ, F5={I-*Q}
S6=BI0 F6=O
④最后的分解为:P={SD, IS, IQ, BIO}
7.设有关系模式R(A,B, C),函数依赖集F={AB—C,C——A},R属于第几范式?力什么?
解:BCNFo巾于A多值依赖于动而C不是码.故不服从4NF。
但在函数依赖式屮C 依赖于码AB.故该模式服从BCNF。
8.设有关系模式R(A,B,C,D),函数依赖集F={A-*B,B-A, AC~*D, BC-D, AD -*C, BD-*C, A—CD, B-*-*CD}0
(1)求R的主码。
(2)R是否为4NF?为什么?
(3)R是否为BCNF?为什么?
(4)R是否为3NF,为什么?
解:1)候选码为AC, BC. AD, BD、可选其屮之一为主码。
2)不服从4NF。
在多值依赖中泱定因素中不包含码。
3)不服从BCNF。
在函数依赖屮决定因素屮不包含码。
4)服从3NF。
该模式中不存在非主属性。
9.设关系模式R(U, F)的属性集15 = {八,B, C},函数依赖集F={A—B,B-C},试求属性闭包A+。
解:设X(0)=A;
计算X(l):扫描F中的各个函数依赖,找到左部为A的函数依赖,得到一个:A->B。
故有X(1)=AUB,即X(1)=AB。
计算X(2):扫描F屮的各个函数依赖,找到左部为AB或A、B的函数依赖,得到一个: B-*C。
故有X(2)=ABUC,即X(2)=ABC=U。
算法终止。
故A+=ABC。