数据库第二章课后习题解答
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(7) 第三次扫描F,找到AC→PE,A→P,GA→B和AE→GB,其左部BGCEA,故置A*=BGCEAP。搜索完,转(8);
(8) 因A≠A*,置A=BGCEAP;
(9) 第四次扫描F,找到PG→A,PAB→G和ABCP→H,其左部BGCEAP,故置A*=BGCEAPH。搜索完,转(10);
(10) 因A≠A*,置A=BGCEAPH;
(11) 第五次扫描F,找不到其左部BGCEAPH的函数依赖,转(12);
(12) 因A=A*,转(13);
(13) 输出A*,即(BG)+=BGCEAPH。
运行算法的VB程序,输入相应数据后,可验证(BG)+=BGCEAPH,如图所示。
图 运行算法的VB程序,求(BG)+。
已知关系模式R(A,B,C,D,E)和函数依赖集F={A→D,E→D,D→B,BC→D,DC→A},问分解ρ={R1(A,B),R2(A,E),R3(E,C),R4(D,B,C),R5(A,C)}是否为R的无损联接分解。
3.设R3(ABC),F3={A→B},ρ3={AB,BC}。
4.设R4(ABC),F4={A→B,B→C},ρ4={AC,BC}。
5.设R5(ABC),F5={AB→C,C→A},ρ5={AC,BC}。
【解答】
1.因为AB∩AC=A,AB-AC=B,A→B成立,所以分解ρ1具有无损连接性。运行算法的VB程序如图(a)所示,验证结果正确。
图(b) 分解ρ2具有无损连接性
3.因为(AB∩BC)↛(AB-BC),而且(AB∩BC)↛(BC-AB),所以分解ρ3不具有无损连接特性。运行算法的VB程序如图(c)所示,验证结果正确。
因为{AB}(F3)∪{BC}(F3)=A→B=F3;所以分解ρ3是保持函数依赖集F3的。
图(c) 分解ρ3不具有无损连接特性
8.检索学习课程中包含了S08学生所学课程的学生学号。
【解答】
1.检索学习课程号为C06的学生学号与成绩。
sno, grade(cno='C06'(elective)) 或1,3(2='C06'(elective))
2.检索学习课程号为C06的学生学号与姓名。
sno, sname(cno='C06'(student elective))
已知关系模式R(A,B,C,D)和函数依赖集F={A→C,D→C,BD→A},ρ={AB,ACD,BCD}是R的一个分解。试证明ρ相对于F不是无损联接分解。
【解答】
ρ相对于F不是无损连接分解,见图。
图 分解ρ={AB,ACD,BCD}相对于F不是无损连接分解
已知关系模式R(A,B,C,D)和函数依赖集F={A→B,B→C,D→B},
3.检索学习课程名为ENGLISH的学生学号与姓名。
sno, sname(cname='ENGLISH'(student elective course))
4.检索选修课程号为C02或C06的学生学号。
sno(cno='C02'∨cno='C06'(elective))
5.检索至少选修课程号为C02和C06的学生学号。
2.习题的ER图可转换成如下的关系模型数据结构。
① 工厂(工厂名称,厂址,联系电话),其中工厂名称是关键字;
② 产品(产品号,产品名,规格,单价),其中产品号是关键字;
③ 工人(工人编号,姓名,性别,职称,工厂名称,雇用期,月薪),其中工人编号是关键字,工厂名称是外关键字,雇用期和月薪是联系属性;
④生产(工厂名称,产品号,月产量),其中(工厂名称,产品号)是关键字,生产关系是表示联系的。
因为{AC}(F5)∪{BC}(F5)=C→A≠F5;所以分解ρ5不具有保持函数依赖特性。
图(e) 分解ρ5具有无损连接性
已知关系模式R(A,B,C,D)和函数依赖集F={A→B,B→C,A→D,D→C},ρ={AB,AC,AD}是R的一个分解。
1.求出F在ρ的每个模式上的投影。
2.ρ相对于F是无损连接分解吗
第3部分习题及其解答
第一章的两道题
3-2 习题2
分别把习题、习题的ER图转换成关系模型数据结构。
【参考答案】
1.习题的ER图可转换成如下的关系模型数据结构。
① 程序员(编号,姓名,性别,年龄,单位,职称),其中编号是关键字;
②程序(程序名称,版权,专利号,价格),其中程序名称是关键字;
③设计(编号,程序名称,开始时间,结束时间),其中(编号,程序名称)是关键字。
1.把R分解成{ACD,BD},试求F在这两个模式上的投影。
2.R1(ACD)和R2(BD)是BCNF吗如果不是,请作进一步分解。
【解答】
1.(ACD)(F)={A→C,D→C};(BD)(F)={D→B}。分解{ACD,BD}丢失了函数依赖集F中的A→B和B→C,所以该分解不具有保持函数依赖特性。
(4) 因A≠A*,置A=ACEB;
(5) 第二次扫描F,找到AB→C,B→D和EC→B,其左部ACEB,故置A*=ACEBD。搜索完,转(6);
(6) 因A≠A*,置A=ACEBD;
(7) 第三次扫描F,找到D→BE,其左部ACEBD,故置A*=ACEBD。搜索完,转(8);
(8) 因A=A*,转(9);
2. 对R1(ACD)和R2(BD)做如下分析。
※ 在R1(ACD)中,有A→C,D→C,(AD)+=ACD;(AD)是键,C是非主属性。
(1) 置初始值A=ф,A*=BG;
(2) 因A≠A*,置A=BG;
(3) 第一次扫描F,找到B→CE,其左部BG,故置A*=BGCE。搜索完,转(4);
(4) 因A≠A*,置A=BGCE;
(5) 第二次扫描F,找到GC→A,其左部BGCE,故置A*=BGCEA。搜索完,转(6);
(6) 因A≠A*,置A=BGCEA;
5.结果关系见表(o)~表(q)。
假设教学数据库中已建立三个关系:
学生关系 student(sno,sname,sex,birth,height,class,address)
课程关系 course(cno,cname,credit)
选修关系 elective(sno,cno,grade)
用关系代数表达式表达下列查询:
4.因为(AC∩BC)↛(AC-BC),而且(AC∩BC)↛(BC-AC),所以分解ρ4不具有无损连接特性。运行算法的VB程序如图(d)所示,验证结果正确。
因为{AC}(F4)∪{BC}(F4)=B→C≠F4;所以分解ρ4不具有保持函数依赖特性。
图(d) 分解ρ4不具有无损连接特性
5.因为AC∩BC=C,AC-BC=A,C→A成立,所以分解ρ5具有无损连接性。运行算法的VB程序如图(e)所示,验证结果正确。
⑦ 表格不能再修改了,算法终止,结果Rρ表如表(2)所示。第3行全为a,即ρ是R的无损联接分解。若本题用算法的VB程序解题,结果见图。
图 习题用算法的VB程序解题
试分析下列分解是否具有无损联接和保持函数依赖的特点。
1.设R1(ABC),F1={A→B},ρ1={AB,AC}。
2.设R2(ABC),F2={A→C,B→C},ρ2={AB,AC}。
3.从A关系的外键出发去找B关系的记录,必须能找到,遵循引用完整性约束规则。
判断下列情况,分别指出他们是用DML还是用DDL来完成下列操作
1.创建“学生”表结构。
2.对“学生”表中的学号属性,其数据类型由“整型”修改为“字符型”。
3.把“学生”表中学号“021”修改为“025”。
【解答】
1.创建“学生”表结构,即定义一个关系模式,用DDL完成。
3.ρ保持依赖吗
【解答】
1.(AB)(F)={A→B};(AC)(F)={A→C};(AD)(F)={A→D};
2.ρ相对于F是无损连接分解,见图。
图 分解ρ={AB,AC,AD}相对于F是无损连接分解
3.因为(AB)(F)∪(AC)(F)∪(AD)(F)={A→B,A→C,A→D},与F比较,丢失了B→C和D→C,所以分解ρ不保持依赖。
对已知的AC→B和B→D,根据Å3传递律,AC→D成立;
对已证的AC→D和已知的D→BE,根据Å3传递律,AC→BE成立;即AC→BE能从F中导出。
方法二:按算法(求属性集合X关于函数依赖集F的闭包X+),求(AC)+。
(1) 置初始值A=ф,A*=AC;
(2) 因A≠A*,置A=AC;
(3) 第一次扫描F,找到C→E和AC→B,其左部AC,故置A*=ACEB。搜索完,转(4);
③ 对D→B,第1,2,3,5行的D同为b14,把这四行的B均改为a2;
④ 对BC→D,第3,4,5行的BC同为(a2,a3),把这三行的D均改为a4;
⑤ 对DC→A,第3,4,5行的DC同为(a4,a3),把这三行的A均改为a1;
⑥ 重复扫描F,对A→D,五行的A同为a1,把这五行的D均改为a4;
判断下列情况,分别指出它们具体遵循那一类完整性约束规则
1.用户写一条语句明确指定月份数据在1~12之间有效。
2.关系数据库中不允许主键值为空的元组存在。
3.从A关系的外键出发去找B关系中的记录,必须能找到。
【解答】
1.用户用语句指定月份数据在1~12之间有效,遵循用户定义的完整性约束规则。
2.关系数据库中不允许主键值为空的元组存在,遵循实体完整性约束规则;
【解答】
1.根据“测试一个分解ρ是否为无损连接分解”的算法,首先建立习题的初始Rρ表,如表(1)所示。
2.反复检查F的每一个函数依赖,修改Rρ表中的元素,一直到表格不能修改为止。
① 对A→D,第1,2,5行的A同为a1,把这三行的D均改为b14;
② 对E→D,第2,3行的E同为a5,把这两行的D均改为b14;
2.修改“学生”表中学号属性的数据类型,即修改关系模式的定义,用DDL完成。
3.修改“学生”表中学号属性的数据值,即对表中的数据进行操作,用DML完成。
给出两个学生选修课程关系A和B,属性为姓名、课程名、成绩。分别写出后列各关系代数运算的结果关系。
1.A和B的并、交、差、乘积、自然联接。
2.成绩>'80'(A);2='数学'∧3<'90'(B);1,3(A);课程名(B)。
因为{AB}(F1)∪{AC}(F1)=A→B=F1;所以分解ρ1是保持函数依赖集F1的。
图(a)分解ρ1具有无损连接性
2.因为AB∩AC=A,AC-AB=C,A→C成立,所以分解ρ2具有无损连接性。运行算法的VB程序如图(b)所示,验证结果正确。
因为{AB}(F2)∪{AC}(F2)=A→C≠F2;所以分解ρ2不具有保持函数依赖特性。
(9) 输出A*,即(AC)+=ACEBD。
因为BE(AC)+,所以AC→BE能够从F中导出。
方法三:运行算法的VB程序,输入相应数据后,得出(AC)+=ACEBD,如图所示。因为BE(AC)+,所以AC→BE能够从F中导出。
图 运行算法的VB程序,求(AC)+。
2.求属性集BG关于F的闭包(BG)+,其算法步骤如下:
sno(1=4∧2='C02'∧5='C06'(electiveelective))
6.检索没有选修C06课程的学生姓名及其所在班级。
sname, class(student) -sname, class(cno='C06'(student elective))
7.检索学习全部课程的学生姓名。
sname(student (sno, cno(elective)cno(course)))
8.检索学习课程中包含了S08学生所来自百度文库课程的学生学号。
sno, cno(elective)(cno(sno='S08'(elective)))
已知关系模式R(A,B,C,D,E)和函数依赖集F={AB→C,B→D,C→E,EC→B,AC→B,D→BE},试问AC→BE能否从F导出
【解答】
方法一:运用推理规则推导。
1.检索学习课程号为C06的学生学号与成绩。
2.检索学习课程号为C06的学生学号与姓名。
3.检索学习课程名为ENGLISH的学生学号与姓名。
4.检索选修课程号为C02或C06的学生学号。
5.检索至少选修课程号为C02和C06的学生学号。
6.检索没有选修C06课程的学生姓名及其所在班级。
7.检索学习全部课程的学生姓名。
3.1,3(2='数学'(B));姓名(成绩>'75'(A B));姓名(课程名='数学'∨课程名='英语'(A-B))。
4. ; 。
5.A B;A B;A B。
【解答】
1.结果关系见表(a)~表(e)。
2.结果关系见表(f)~表(i)。
3.结果关系见表(j)~表(l)。
4.结果关系见表(m)~表(n)。
(8) 因A≠A*,置A=BGCEAP;
(9) 第四次扫描F,找到PG→A,PAB→G和ABCP→H,其左部BGCEAP,故置A*=BGCEAPH。搜索完,转(10);
(10) 因A≠A*,置A=BGCEAPH;
(11) 第五次扫描F,找不到其左部BGCEAPH的函数依赖,转(12);
(12) 因A=A*,转(13);
(13) 输出A*,即(BG)+=BGCEAPH。
运行算法的VB程序,输入相应数据后,可验证(BG)+=BGCEAPH,如图所示。
图 运行算法的VB程序,求(BG)+。
已知关系模式R(A,B,C,D,E)和函数依赖集F={A→D,E→D,D→B,BC→D,DC→A},问分解ρ={R1(A,B),R2(A,E),R3(E,C),R4(D,B,C),R5(A,C)}是否为R的无损联接分解。
3.设R3(ABC),F3={A→B},ρ3={AB,BC}。
4.设R4(ABC),F4={A→B,B→C},ρ4={AC,BC}。
5.设R5(ABC),F5={AB→C,C→A},ρ5={AC,BC}。
【解答】
1.因为AB∩AC=A,AB-AC=B,A→B成立,所以分解ρ1具有无损连接性。运行算法的VB程序如图(a)所示,验证结果正确。
图(b) 分解ρ2具有无损连接性
3.因为(AB∩BC)↛(AB-BC),而且(AB∩BC)↛(BC-AB),所以分解ρ3不具有无损连接特性。运行算法的VB程序如图(c)所示,验证结果正确。
因为{AB}(F3)∪{BC}(F3)=A→B=F3;所以分解ρ3是保持函数依赖集F3的。
图(c) 分解ρ3不具有无损连接特性
8.检索学习课程中包含了S08学生所学课程的学生学号。
【解答】
1.检索学习课程号为C06的学生学号与成绩。
sno, grade(cno='C06'(elective)) 或1,3(2='C06'(elective))
2.检索学习课程号为C06的学生学号与姓名。
sno, sname(cno='C06'(student elective))
已知关系模式R(A,B,C,D)和函数依赖集F={A→C,D→C,BD→A},ρ={AB,ACD,BCD}是R的一个分解。试证明ρ相对于F不是无损联接分解。
【解答】
ρ相对于F不是无损连接分解,见图。
图 分解ρ={AB,ACD,BCD}相对于F不是无损连接分解
已知关系模式R(A,B,C,D)和函数依赖集F={A→B,B→C,D→B},
3.检索学习课程名为ENGLISH的学生学号与姓名。
sno, sname(cname='ENGLISH'(student elective course))
4.检索选修课程号为C02或C06的学生学号。
sno(cno='C02'∨cno='C06'(elective))
5.检索至少选修课程号为C02和C06的学生学号。
2.习题的ER图可转换成如下的关系模型数据结构。
① 工厂(工厂名称,厂址,联系电话),其中工厂名称是关键字;
② 产品(产品号,产品名,规格,单价),其中产品号是关键字;
③ 工人(工人编号,姓名,性别,职称,工厂名称,雇用期,月薪),其中工人编号是关键字,工厂名称是外关键字,雇用期和月薪是联系属性;
④生产(工厂名称,产品号,月产量),其中(工厂名称,产品号)是关键字,生产关系是表示联系的。
因为{AC}(F5)∪{BC}(F5)=C→A≠F5;所以分解ρ5不具有保持函数依赖特性。
图(e) 分解ρ5具有无损连接性
已知关系模式R(A,B,C,D)和函数依赖集F={A→B,B→C,A→D,D→C},ρ={AB,AC,AD}是R的一个分解。
1.求出F在ρ的每个模式上的投影。
2.ρ相对于F是无损连接分解吗
第3部分习题及其解答
第一章的两道题
3-2 习题2
分别把习题、习题的ER图转换成关系模型数据结构。
【参考答案】
1.习题的ER图可转换成如下的关系模型数据结构。
① 程序员(编号,姓名,性别,年龄,单位,职称),其中编号是关键字;
②程序(程序名称,版权,专利号,价格),其中程序名称是关键字;
③设计(编号,程序名称,开始时间,结束时间),其中(编号,程序名称)是关键字。
1.把R分解成{ACD,BD},试求F在这两个模式上的投影。
2.R1(ACD)和R2(BD)是BCNF吗如果不是,请作进一步分解。
【解答】
1.(ACD)(F)={A→C,D→C};(BD)(F)={D→B}。分解{ACD,BD}丢失了函数依赖集F中的A→B和B→C,所以该分解不具有保持函数依赖特性。
(4) 因A≠A*,置A=ACEB;
(5) 第二次扫描F,找到AB→C,B→D和EC→B,其左部ACEB,故置A*=ACEBD。搜索完,转(6);
(6) 因A≠A*,置A=ACEBD;
(7) 第三次扫描F,找到D→BE,其左部ACEBD,故置A*=ACEBD。搜索完,转(8);
(8) 因A=A*,转(9);
2. 对R1(ACD)和R2(BD)做如下分析。
※ 在R1(ACD)中,有A→C,D→C,(AD)+=ACD;(AD)是键,C是非主属性。
(1) 置初始值A=ф,A*=BG;
(2) 因A≠A*,置A=BG;
(3) 第一次扫描F,找到B→CE,其左部BG,故置A*=BGCE。搜索完,转(4);
(4) 因A≠A*,置A=BGCE;
(5) 第二次扫描F,找到GC→A,其左部BGCE,故置A*=BGCEA。搜索完,转(6);
(6) 因A≠A*,置A=BGCEA;
5.结果关系见表(o)~表(q)。
假设教学数据库中已建立三个关系:
学生关系 student(sno,sname,sex,birth,height,class,address)
课程关系 course(cno,cname,credit)
选修关系 elective(sno,cno,grade)
用关系代数表达式表达下列查询:
4.因为(AC∩BC)↛(AC-BC),而且(AC∩BC)↛(BC-AC),所以分解ρ4不具有无损连接特性。运行算法的VB程序如图(d)所示,验证结果正确。
因为{AC}(F4)∪{BC}(F4)=B→C≠F4;所以分解ρ4不具有保持函数依赖特性。
图(d) 分解ρ4不具有无损连接特性
5.因为AC∩BC=C,AC-BC=A,C→A成立,所以分解ρ5具有无损连接性。运行算法的VB程序如图(e)所示,验证结果正确。
⑦ 表格不能再修改了,算法终止,结果Rρ表如表(2)所示。第3行全为a,即ρ是R的无损联接分解。若本题用算法的VB程序解题,结果见图。
图 习题用算法的VB程序解题
试分析下列分解是否具有无损联接和保持函数依赖的特点。
1.设R1(ABC),F1={A→B},ρ1={AB,AC}。
2.设R2(ABC),F2={A→C,B→C},ρ2={AB,AC}。
3.从A关系的外键出发去找B关系的记录,必须能找到,遵循引用完整性约束规则。
判断下列情况,分别指出他们是用DML还是用DDL来完成下列操作
1.创建“学生”表结构。
2.对“学生”表中的学号属性,其数据类型由“整型”修改为“字符型”。
3.把“学生”表中学号“021”修改为“025”。
【解答】
1.创建“学生”表结构,即定义一个关系模式,用DDL完成。
3.ρ保持依赖吗
【解答】
1.(AB)(F)={A→B};(AC)(F)={A→C};(AD)(F)={A→D};
2.ρ相对于F是无损连接分解,见图。
图 分解ρ={AB,AC,AD}相对于F是无损连接分解
3.因为(AB)(F)∪(AC)(F)∪(AD)(F)={A→B,A→C,A→D},与F比较,丢失了B→C和D→C,所以分解ρ不保持依赖。
对已知的AC→B和B→D,根据Å3传递律,AC→D成立;
对已证的AC→D和已知的D→BE,根据Å3传递律,AC→BE成立;即AC→BE能从F中导出。
方法二:按算法(求属性集合X关于函数依赖集F的闭包X+),求(AC)+。
(1) 置初始值A=ф,A*=AC;
(2) 因A≠A*,置A=AC;
(3) 第一次扫描F,找到C→E和AC→B,其左部AC,故置A*=ACEB。搜索完,转(4);
③ 对D→B,第1,2,3,5行的D同为b14,把这四行的B均改为a2;
④ 对BC→D,第3,4,5行的BC同为(a2,a3),把这三行的D均改为a4;
⑤ 对DC→A,第3,4,5行的DC同为(a4,a3),把这三行的A均改为a1;
⑥ 重复扫描F,对A→D,五行的A同为a1,把这五行的D均改为a4;
判断下列情况,分别指出它们具体遵循那一类完整性约束规则
1.用户写一条语句明确指定月份数据在1~12之间有效。
2.关系数据库中不允许主键值为空的元组存在。
3.从A关系的外键出发去找B关系中的记录,必须能找到。
【解答】
1.用户用语句指定月份数据在1~12之间有效,遵循用户定义的完整性约束规则。
2.关系数据库中不允许主键值为空的元组存在,遵循实体完整性约束规则;
【解答】
1.根据“测试一个分解ρ是否为无损连接分解”的算法,首先建立习题的初始Rρ表,如表(1)所示。
2.反复检查F的每一个函数依赖,修改Rρ表中的元素,一直到表格不能修改为止。
① 对A→D,第1,2,5行的A同为a1,把这三行的D均改为b14;
② 对E→D,第2,3行的E同为a5,把这两行的D均改为b14;
2.修改“学生”表中学号属性的数据类型,即修改关系模式的定义,用DDL完成。
3.修改“学生”表中学号属性的数据值,即对表中的数据进行操作,用DML完成。
给出两个学生选修课程关系A和B,属性为姓名、课程名、成绩。分别写出后列各关系代数运算的结果关系。
1.A和B的并、交、差、乘积、自然联接。
2.成绩>'80'(A);2='数学'∧3<'90'(B);1,3(A);课程名(B)。
因为{AB}(F1)∪{AC}(F1)=A→B=F1;所以分解ρ1是保持函数依赖集F1的。
图(a)分解ρ1具有无损连接性
2.因为AB∩AC=A,AC-AB=C,A→C成立,所以分解ρ2具有无损连接性。运行算法的VB程序如图(b)所示,验证结果正确。
因为{AB}(F2)∪{AC}(F2)=A→C≠F2;所以分解ρ2不具有保持函数依赖特性。
(9) 输出A*,即(AC)+=ACEBD。
因为BE(AC)+,所以AC→BE能够从F中导出。
方法三:运行算法的VB程序,输入相应数据后,得出(AC)+=ACEBD,如图所示。因为BE(AC)+,所以AC→BE能够从F中导出。
图 运行算法的VB程序,求(AC)+。
2.求属性集BG关于F的闭包(BG)+,其算法步骤如下:
sno(1=4∧2='C02'∧5='C06'(electiveelective))
6.检索没有选修C06课程的学生姓名及其所在班级。
sname, class(student) -sname, class(cno='C06'(student elective))
7.检索学习全部课程的学生姓名。
sname(student (sno, cno(elective)cno(course)))
8.检索学习课程中包含了S08学生所来自百度文库课程的学生学号。
sno, cno(elective)(cno(sno='S08'(elective)))
已知关系模式R(A,B,C,D,E)和函数依赖集F={AB→C,B→D,C→E,EC→B,AC→B,D→BE},试问AC→BE能否从F导出
【解答】
方法一:运用推理规则推导。
1.检索学习课程号为C06的学生学号与成绩。
2.检索学习课程号为C06的学生学号与姓名。
3.检索学习课程名为ENGLISH的学生学号与姓名。
4.检索选修课程号为C02或C06的学生学号。
5.检索至少选修课程号为C02和C06的学生学号。
6.检索没有选修C06课程的学生姓名及其所在班级。
7.检索学习全部课程的学生姓名。
3.1,3(2='数学'(B));姓名(成绩>'75'(A B));姓名(课程名='数学'∨课程名='英语'(A-B))。
4. ; 。
5.A B;A B;A B。
【解答】
1.结果关系见表(a)~表(e)。
2.结果关系见表(f)~表(i)。
3.结果关系见表(j)~表(l)。
4.结果关系见表(m)~表(n)。