关系数据库的模式设计习题及答案.docx
《关系数据库的模式设计习题及答案.docx》由会员分享,可在线阅读,更多相关《关系数据库的模式设计习题及答案.docx(12页珍藏版)》请在冰豆网上搜索。
关系数据库的模式设计习题及答案
数据库原理之关系数据库的模式设计课后习题及答案
4.1 名词解释
(1)函数依赖:
FD(functiondependency),设有关系模式R(U),X,Y是U的子集,r是R的任一具体关系,如果对r的任意两个元组t1,t2,由t1[X]=t2[X]导致t1[Y]=t2[Y],则称X函数决定Y,或Y函数依赖于X,记为X→Y。
X→Y为模式R的一个函数依赖。
(2)函数依赖的逻辑蕴涵:
设F是关系模式R的一个函数依赖集,X,Y是R的属性子集,如果从F中的函数依赖能够推出X→Y,则称F逻辑蕴涵X→Y,记为F|=X→Y。
(3)部分函数依赖:
即局部依赖,对于一个函数依赖W→A,如果存在X
W(X包含于W)有X→A成立,那么称W→A是局部依赖,否则称W→A为完全依赖。
(4)完全函数依赖:
见上。
(5)传递依赖:
在关系模式中,如果Y→X,X→A,且X
Y(X不决定Y),A
X(A不属于X),那么称Y→A是传递依赖。
(6)函数依赖集F的闭包F+:
被逻辑蕴涵的函数依赖的全体构成的集合,称为F的闭包(closure),记为F+。
(7)1NF:
第一式。
如果关系模式R的所有属性的值域中每一个值都是不可再分解的值,则称R是属于第一式模式。
如果某个数据库模式都是第一式的,则称该数据库存模式属于第一式的数据库模式。
第一式的模式要求属性值不可再分裂成更小部分,即属性项不能是属性组合和组属性组成。
(8)2NF:
第二式。
如果关系模式R为第一式,并且R中每一个非主属性完全函数依赖于R的某个候选键,则称是第二式模式;如果某个数据库模式中每个关系模式都是第二式的,则称该数据库模式属于第二式的数据库模式。
(注:
如果A是关系模式R的候选键的一个属性,则称A是R的主属性,否则称A是R的非主属性。
)
(9)3NF:
第三式。
如果关系模式R是第二式,且每个非主属性都不传递依赖于R的候选键,则称R是第三式的模式。
如果某个数据库模式中的每个关系模式都是第三式,则称为3NF的数据库模式。
(10)BCNF:
BC式。
如果关系模式R是第一式,且每个属性都不传递依赖于R的候选键,那么称R是BCNF的模式。
(11)4NF:
第四式。
设R是一个关系模式,D是R上的多值依赖集合。
如果D中成立非平凡多值依赖X→→Y时,X必是R的超键,那么称R是第四式的模式。
(12)推理规则的正确性和完备性:
正确性是指,如果X→Y是从推理规则推出的,那么X→Y在F+中。
完备性是指,不能从F使用推理规则导出的函数依赖不在F+中。
(13)依赖集的覆盖和等价:
关系模式R(U)上的两个函数依赖集F和G,如果满足F+=G+,则称F和G是等价的。
如果F和G等价,则可称F覆盖G或G覆盖F。
(14)最小依赖集:
如果函数集合F满足以下三个条件:
(1)F中每个函数依赖的右部都是单属性;
(2)F中的任一函数依赖X→A,其F-{X→A}与F是不等价的;(3)F中的任一函数依赖X→A,Z为X的子集,(F-{X→A})∪{Z→A}与F不等价。
则称F为最小函数依赖集合,记为Fmin。
(15)无损联接:
设R是一关系模式,分解成关系模式ρ={R1,R2...,Rk},F是R上的一个函数依赖集。
如果对R中满足F的每一个关系r都有r=πR1(r)
πR2(r)
...
πRk(r)则称这个分解相对于F是"无损联接分解"。
(16)保持依赖集:
所谓保持依赖就是指关系模式的函数依赖集在分解后仍在数据库中保持不变,即关系模式R到ρ={R1,R2,...,Rk}的分解,使函数依赖集F被F这些Ri上的投影蕴涵。
(17)多值依赖:
设R(U)是属性集U上的一个关系模式,X,Y,Z是U的子集,并且Z=U-X-Y,用x,y,z分别代表属性集X,Y,Z的值,只要r是R的关系,r中存在元组(x,y1,z1)和(x,y2,z2)时,就也存在元组(x,y1,z2)和(x,y2,z1),那么称多值依赖(MultiValuedDependencyMVD)X→→Y在关系模式R中成立。
4.2关系模式R有n个属性,在模式R上可能成立的函数依赖有多少个?
其中平凡的函数依赖有多少个?
非平凡的函数依赖有多少个?
(要考虑所有可能的情况,数学排列组合问题。
对于数据库本身而言,本题没多大意义)
所有属性相互依赖时,函数依赖最多。
∙平凡的函数依赖:
对于函数依赖X→Y,如果Y
X,那么称X→Y是一个“平凡的函数依赖”。
4.3建立关于系、学生、班级、社团等信息的一个关系数据库,一个系有若干个专业,每个专业每年只招一个班,每个班有若干个学生,一个系的学生住在同一宿舍区,每个学生可以参加若干个社团,每个社团有若干学生。
描述学生的属性有:
学号、、出生年月、系名、班级号、宿舍区。
描述班级的属性有:
班级号、专业名、系名、人数、入校年份。
描述系的属性有:
系名、系号、系办公地点、人数。
描述社团的属性有:
社团名、成立年份、地点、人数、学生参加某社团的年份。
请给出关系模式,写出每个关系模式的最小函数依赖集,指出是否存在传递函数依赖,对于函数依赖左部是多属性的情况,讨论函数依赖是完全函数依赖还是部分函数依赖。
指出各关系的候选键、外部键,有没有全键存在?
各关系模式如下:
学生(学号,,出生年月,系名,班级号,宿舍区)
班级(班级号,专业名,系名,人数,入校年份)
系(系名,系号,系办公地点,人数)
社团(社团名,成立年份,地点,人数)
加入社团(社团名,学号,学生参加社团的年份)
学生(学号,,出生年月,系名,班级号,宿舍区)
●“学生”关系的最小函数依赖集为:
Fmin={学号→,学号→班级号,学号→出生年月,学号→系名,系名→宿舍区}
●以上关系模式中存在传递函数依赖,如:
学号→系名,系名→宿舍区
●候选键是学号,外部键是班级号,系名。
notice:
在关系模式中,如果Y→X,X→A,且X
Y(X不决定Y),A不属于X,那么称Y→A是传递依赖。
班级(班级号,专业名,系名,人数,入校年份)
●“班级”关系的最小函数依赖集为:
Fmin={(系名,专业名)→班级号,班级号→人数,班级号→入校年份,班级号→系名,班级号→专业名}
(假设没有相同的系,不同系中专业名可以相同)
●以上关系模式中不存在传递函数依赖。
●“(系名,专业名)→班级号”是完全函数依赖。
●候选键是(系名,专业名),班级号,外部键是系名。
系(系名,系号,系办公地点,人数)
●“系”关系的最小函数依赖集为:
Fmin={系号→系名,系名→系办公地点,系名→人数,系名→系号}
●以上关系模式中不存在传递函数依赖
●候选键是系名,系号
社团(社团名,成立年份,地点,人数)
●“社团”关系的最小函数依赖集为:
Fmin={社团名→成立年份,社团名→地点,社团名→人数)
●以上关系模式中不存在传递函数依赖。
●候选键是社团名
加入社团(社团名,学号,学生参加社团的年份)
●“加入社团”关系的最小函数依赖集为:
Fmin={(社团名,学号)→学生参加社团的年份)
●“(社团名,学号)→学生参加社团的年份”是完全函数依赖。
●以上关系模式中不存在传递函数依赖。
●候选键是(社团名,学号)。
4.4对函数依赖X→Y的定义加以扩充,X和Y可以为空属性集,用φ表示,那么X→φ,φ→Y,φ→φ的含义是什么?
根据函数依赖的定义,以上三个表达式的含义为:
(1)一个关系模式R(U)中,X,Y是U的子集,r是R的任一具体关系,如果对r的任意两个元组t1,t2,由t1[X]=t2[X]必有t1[φ]=t2[φ]。
即X→φ表示空属性函数依赖于X。
这是任何关系中都存在的。
(2)φ→Y表示Y函数依赖于空属性。
由此可知该关系中所有元组中Y属性的值均相同。
(3)φ→φ表示空属性函数依赖于空属性。
这也是任何关系中都存在的。
4.5已知关系模式R(ABC),F={A→C,B→C},求F+。
可以直接通过自反律、增广律、传递律加以推广:
F+={φ→φ,A→φ,B→φ,C→φ,A→C,B→C,AB→φ,AB→A,AB→B,AB→C,AB→BC,AB→AB,AB→ABC,BC→φ,BC→C,BC→B,BC→BC,AC→φ,AC→C,AC→A,AC→AC,ABC→φ,ABC→A,ABC→B,ABC→C,ABC→BC,ABC→AB,ABC→ABC}
4.6试分析下列分解是否具有无损联接和保持函数依赖的特点:
(1)设R(ABC),F1={A→B}在R上成立,ρ1={AB,AC}。
首先,检查是否具有无损联接特点:
第1种解法--算法4.2:
A
B
C
AB
a1
a2
b13
AC
a1
b22
a3
A
B
C
a1
a2
b13
a1
a2
a3
(1)构造表
(2)根据A→B进行处理
结果第二行全是a行,因此分解是无损联接分解。
第2种解法:
(定理4.8)
设R1=AB,R2=AC
R1∩R2=A
R2-R1=B
∵A→B,∴该分解是无损联接分解。
然后,检查分解是否保持函数依赖
πR1(F1)={A→B,以及按自反率推出的一些函数依赖}
πR2(F1)={按自反率推出的一些函数依赖}
F1被πR1(F1)所蕴涵,∴所以该分解保持函数依赖。
(2)设R(ABC),F2={A→C,B→C}在R上成立,ρ2={AB,AC}
首先,检查是否具有无损联接特点:
第1种解法(略)
第2种解法:
(定理4.8)
设R1=AB,R2=AC
R1∩R2=A
R2-R1=C
∵A→C,∴该分解是无损联接分解。
然后,检查分解是否保持函数依赖
πR1(F2)={按自反率推出的一些函数依赖}
πR2(F2)={A→C,以及按自反率推出的一些函数依赖}
∵F1中的B→C没有被蕴涵,所以该分解没有保持函数依赖。
(3)设R(ABC),F3={A→B},在R上成立,ρ3={AB,BC}.
首先,检查是否具有无损联接特点:
第1种解法:
A
B
C
AB
a1
a2
b13
BC
b21
a2
a3
A
B
C
a1
a2
a3
a1
b22
a3
(1)构造表
(2)根据A→B进行处理
没有一行全是a行。
因此这个分解不具有无损联接特性。
第2种解法:
(定理4.8)
设R1=AB,R2=BC
R1∩R2=B
R2-R1=C,R1-R2=A
∵B→C,B→A不在F3中∴该分解不具有无损联接特性。
然后,检查分解是否保持函数依赖
πR1(F3)={A→B,以及按自反率推出的一些函数依赖}
πR2(F3)={按自反率推出的一些函数依赖}
F1被πR1(F3)所蕴涵,所以该分解保持函数依赖。
(4)设R(ABC),F4={A→B,B→C}在R上成立,ρ4={AC,BC}
首先,检查是否具有无损联接特点:
第1种解法(略)
第2种解法:
(定理4.8)
设R1=AC,R2=BC
R1(AC)∩R2(BC)=C
R2-R1=B,R1-R2=A
∵C→B,C→A不在F4中∴该分解不具有无损联接特性。
然后,检查分解是否保持函数依赖
πR1(F2)={按自反率推出的一些函数依赖}
πR2(F2)={B→C,以及按自反率推出的一些函数依赖}
∵F1中的A→B没有被蕴涵,所以该分解没有保持函数依赖。
4.7设R=ABCD,R上的函数依赖集F={A→B,B→C,A→D,D→C},R的一个分解ρ={AB,AC,AD},求:
(1)F在ρ的每个模式上的投影。
(2)ρ相对于F是无损联接分解吗?
(3)ρ保持依赖吗?
(1)
πAB(F)={A→B,及按自反律所推导出的一些平凡函数依赖}
πAC(F)={A→C,及按自反律所推导出的一些平凡函数依赖}
πAD(F)={A→D,及按自反律所推导出的一些平凡函数依赖}
(2)
A
B
C
D
AB
a1
a2
b13
b14
AC
a1
b22
a3
b24
AD
a1
b32
b33
a4
A
B
C
D
a1
a2
a3
a4
a1
a2
a3
a4
a1
a2
a3
a4
(1)构造表
(2)根据A→B,B→C,A→D,D→C进行处理
每一行都是a,ρ相对于F是无损联接分解。
(3)πAB(F)∪πAC(F)∪πAD(F)={A→B,A→C,A→D},
没有满足B→C,D→C函数依赖,
因此ρ相对于F的这个分解不保持函数依赖。
4.8设R=ABCD,R上的F={A→C,D→C,BD→A},试证明ρ={AB,ACD,BCD}相对于F不是无损联接分解。
根据算法4.2
A
B
C
D
AB
a1
a2
b13
b14
ACD
a1
b22
a3
a4
BCD
b31
a2
a3
a4
A
B
C
D
a1
a2
a3
b14
a1
b22
a3
a4
b31
a2
a3
a4
(1)构造表
(2)根据A→C,D→C,BD→A进行处理
没有一行都是a,所以,ρ相对于F不是无损联接分解。
4.9设R=ABCD,R上的F={A→B,B→C,D→B},把R分解成BCNF模式集。
(1)若首先把R分解成{ACD,BD},试求F在这两个模式上的投影。
(2)ACD和BD是BCNF吗?
如果不是,请进一步分解。
(1)πACD(F)={A→C}
πBD(F)={D→B}
(2)因为根据BCNF的定义,要求关系模式是第一式,且每个属性都不传递依赖于R的侯选键。
BCD中(A,D)为候选键,可是(A,D)→A,A→C,所以它不是BCNF模式。
它可进一步分解为:
{AC,DC},此时AC,DC均为BCNF模式。
BD是BCNF,因为R2(BD)是第一式,且每个属性都不传递依赖于D(候选键),所以它是BCNF模式。
4.10设R=ABCD,ρ={AB,BC,CD}。
F1={A→B,B→C};F2={B→C,C→D};
(1)如果F1是R上的函数依赖集,此时ρ是无损联接分解吗?
若不是,试举出反例。
(2)如果F2是R上的函数依赖集呢?
(1)不是无损联接。
可由算法4.2判断或由定理4.8判断。
根据算法4.2
A
B
C
D
AB
a1
a2
b13
b14
BC
b21
a2
a3
b24
CD
b31
b32
a3
a4
A
B
C
D
a1
a2
a3
b14
b21
a2
a3
b24
b31
b32
a3
a4
(1)构造表
(2)根据A→B,B→C进行处理
结果没有出现一行全a的情况,所以它不是无损联接。
举例如下:
设模式R的一关系r为{(a1b1c1d1),(a2b2c1d2)}
则有:
r1=πAB(r)={(a1b1),(a2b2)}
r2=πBC(r)={(b1c1),(b2c1)}
r3=πCD(r)={(c1d1),(c1d2)}
令a=r1
r2
r3={(a1b1c1d1),(a1b1c1d2),(a2b2c1d1),(a2b2c1d2)}
r≠a,所以ρ不是无损联接。
(2)如果F2是R上的函数依赖,则可以判断,ρ是无损联接。
判断过程同上。
4.11设关系模式R(S#,C#,GRADE,TNAME,TADDR),其属性分别表示学生学号、选修课程的编号,成绩、任课教师地址等意义。
如果规定,每个学生每学一门课只有一个成绩;每门课只有一个教师任教;每个教师只有一个地址(此处不允许教师同名同姓)。
(1)试写出关系模式R基本的函数依赖和候选键。
(2)试把R分解成2NF模式集并说明理由。
(3)试把R分解成3NF模式集,并说明理由。
(1)F={(S#,C#)→GRADE,C#→TNAME,TNAME→TADDR}
侯选键是(S#,C#)。
(2)在模式R中,TNAME不完全依赖于键(S#,C#),因此需进行分解,可分解为下列两个关系。
SC={S#,C#,GRADE}C={C#,TNAME,TADDR}
分解后,SC中,GRADE完全依赖于侯选键(S#,C#),在C中,主属性是C#,TNAME、TADDR均完全依赖于C#。
因此,该分解符合2NF模式。
(3)3NF:
若每个关系模式是2NF,则每个非主属性都不传递于R的候选键。
按上述已分好的两个模式,SC中已满足“每个非主属性都不传递于R的候选键”,已是3NF,而在C中,C#→TNAME,TNAME→TADDR,TADDR传递依赖于C#,因此还需分成两个模式:
CT(C#,TNAME),T(TNAME,TADD)。
分解后,总共有SC={S#,C#,GRADE},CT(C#,TNAME),T(TNAME,TADD)三个模式。
该分解符合3NF模式。
4.12图4.6表示一个公司各部门的层次结构,对每个部门,数据库中包含部门号(唯一的)D#,预算费(BUDGET)以及此部门领导人员的职工号(唯一的)E#等信息。
对每一个部门,还存有部门的全部职工,生产科研项目以及办公室的信息。
职工信息包括:
职工号,他所参加的生产科研项目号(J#),他所在办公室的号(PHONE#)。
生产科研项目包含:
项目号(唯一的),预算费。
办公室信息包含:
办公室号(唯一的),面积。
对每个职工,数据库中有他曾担任过的职务以及担任某一职务时的工资历史。
对每个办公室包含此办公室中全部号吗的信息。
请给出你认为合理的数据依赖,把这个层次结构转换成一组规化的关系。
提示:
此题可分步完成,先转换成一组1NF的关系,然后逐步转换成2NF,3NF,...。
先得到一个泛关系的模式如下:
D={D#,Manager_E#,Budget,E#,J#,Phone#,Business,Sa_History,Office#,Area}
D#:
部门号,Manager_E#:
部门领导人员的职工号,E#:
职工号,J#:
生产科研项目号,Phone#:
办公室的号,Business:
职工职务,Sa_History:
工资历史,Office#:
办公室号,Area:
办公室面积
根据所给信息,给出下列数据依赖:
F={D#→Manager_E#,E#→Office#,(E#,Business)→Sa_History,J#→Budget,E#→J#,Office#→Area,Office→D#,#Phone#→Office#}
(假设一个部门可能有多个办公室,有多个项目,一个办公室只属于一个部门,有多部,一个员工只参加一个项目,一个项目可能属于多个部门)
只要保证每个属性值不可分割,以上式即为1NF。
候选键为(E#,Business,Phone#)
转换成2NF关系(消除局部依赖):
Em_Dep(E#,D#,Manager_E#,Office#,Area,J#,Budget)
对应F={D#→Manager_E#,E#→Office#,J#→Budget,E#→J#,Office#→Area,Office→D#}
History(E#,Business,History)
对应F={(E#,Business)→Sa_History}
Phone(Phone#,Office#)
对应F={Phone#→Office#}
转换成3NF关系(消除非主属性对侯选键的传递依赖):
Department(D#,Manager_E#)
Office(Office#,Area,D#)
Emproee(E#,J#,Office#)
History(E#,Business,History)
Phone(Phone#,Office#)
Project(J#,Budget)
注意:
由于对题意理解的不同,可能答案不唯一。
4.13设关系模式R(ABC)上有一个多值依赖A→→B。
如果已知R的当前关系中存在三组(ab1c1)、(ab2c2)和(ab3c3),那么这个关系中至少还应存在哪些元组?
从多值依赖的定义可以得出,至少应存在下列元组:
(ab1c2)、(ab1c3)、(ab2c1)、(ab2c3)、(ab3c1)、(ab3c2)