第3部分 习题及其解答第一章的两道题设计 N 开始时间结束时间版权专利号月薪3-2 习题2分别把习题、习题的ER 图转换成关系模型数据结构。
【参考答案】1.习题的ER 图可转换成如下的关系模型数据结构。
①程序员(编号,姓名,性别,年龄,单位,职称),其中编号是关键字; ② 程序(程序名称,版权,专利号,价格),其中程序名称是关键字;③ 设计(编号,程序名称,开始时间,结束时间),其中(编号,程序名称)是关键字。
2.习题的ER 图可转换成如下的关系模型数据结构。
① 工厂(工厂名称,厂址,联系电话),其中工厂名称是关键字; ② 产品(产品号,产品名,规格,单价),其中产品号是关键字;③ 工人(工人编号,姓名,性别,职称,工厂名称,雇用期,月薪),其中工人编号是关键字,工厂名称是外关键字,雇用期和月薪是联系属性;④ 生产(工厂名称,产品号,月产量),其中(工厂名称,产品号)是关键字,生产关系是表示联系的。
判断下列情况,分别指出它们具体遵循那一类完整性约束规则生产月产量雇用雇用期v1.0 可编辑可修改1.用户写一条语句明确指定月份数据在1~12之间有效。
2.关系数据库中不允许主键值为空的元组存在。
3.从A 关系的外键出发去找B 关系中的记录,必须能找到。
【解答】1.用户用语句指定月份数据在1~12之间有效,遵循用户定义的完整性约束规则。
2.关系数据库中不允许主键值为空的元组存在,遵循实体完整性约束规则; 3.从A 关系的外键出发去找B 关系的记录,必须能找到,遵循引用完整性约束规则。
判断下列情况,分别指出他们是用DML 还是用DDL 来完成下列操作1.创建“学生”表结构。
2.对“学生”表中的学号属性,其数据类型由“整型”修改为“字符型”。
3.把“学生”表中学号“021”修改为“025”。
【解答】1.创建“学生”表结构,即定义一个关系模式,用DDL 完成。
2.修改“学生”表中学号属性的数据类型,即修改关系模式的定义,用DDL 完成。
3.修改“学生”表中学号属性的数据值,即对表中的数据进行操作,用DML 完成。
给出两个学生选修课程关系A 和B ,属性为姓名、课程名、成绩。
分别写出后列各关系代数运算的结果关系。
1.A 和B 的并、交、差、乘积、自然联接。
2.> '' (A ); 2= ''∧<'' (B ); ,(A ); (B )。
3.关系A姓名 课程名 成绩 李红数学89罗杰明英语 78关系B姓名 课程名 成绩 黄边晴C++语言86 李红 数学894.B A 11=; B A3322>∧= 。
5.A [] B ; A ]B ; A [ B 。
【解答】1.结果关系见表(a)~表(e)。
2.结果关系见表(f)~表(i)。
表(f) ' '(A ) 结果关系姓名 课程名 成绩 李红数学89 表(g) '''' (B ) 结果关系姓名 课程名 成绩 李红数学8934.结果关系见表(m)~表(n)。
5表(h) (A) 结果关系姓名成绩李红89罗杰明78表(i) (B)结果关系课程名C++语言表(j) (''(B)) 结果关系姓名成绩李红89表(k) (''(AB)) 结果关系姓名表(l) (''''(A-B)) 结果关系姓名假设教学数据库中已建立三个关系: 学生关系 student(sno,sname,sex,birth,height,class,address) 课程关系 course(cno,cname,credit) 选修关系 elective(sno,cno,grade) 用关系代数表达式表达下列查询:1.检索学习课程号为C06的学生学号与成绩。
2.检索学习课程号为C06的学生学号与姓名。
3.检索学习课程名为ENGLISH 的学生学号与姓名。
4.检索选修课程号为C02或C06的学生学号。
5.检索至少选修课程号为C02和C06的学生学号。
6.检索没有选修C06课程的学生姓名及其所在班级。
7.检索学习全部课程的学生姓名。
8.检索学习课程中包含了S08学生所学课程的学生学号。
【解答】1.检索学习课程号为C06的学生学号与成绩。
sno, grade (cno='C06' (elective)) 或1,3 (2='C06' (elective))2.检索学习课程号为C06的学生学号与姓名。
sno, sname (cno='C06' (studentelective)) 3.检索学习课程名为ENGLISH 的学生学号与姓名。
sno, sname (cname='ENGLISH ' (studentelective course)) 4.检索选修课程号为C02或C06的学生学号。
表(q) A [ B 结果关系姓名课程名 成绩 李红数学 89 黄边晴C++语言86sno (cno='C02'∨cno='C06' (elective))5.检索至少选修课程号为C02和C06的学生学号。
sno (1=4∧2='C02'∧5='C06' (electiveelective))6.检索没有选修C06课程的学生姓名及其所在班级。
sname, class (student) -sname, class (cno='C06' (studentelective)) 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 导出 【解答】方法一:运用推理规则推导。
对已知的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);(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);(9) 输出A*,即(AC)+=ACEBD。
因为BE(AC)+ ,所以AC→BE能够从F中导出。
方法三:运行算法的VB程序,输入相应数据后,得出(AC)+=ACEBD,如图所示。
因为BE(AC)+ ,所以AC→BE能够从F中导出。
图运行算法的VB程序,求(AC)+。
2.求属性集BG关于F的闭包(BG)+,其算法步骤如下:(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;(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的无损联接分解。
【解答】1.根据“测试一个分解ρ是否为无损连接分解”的算法,首先建立习题的初始Rρ表,如表(1)所示。
2① 对A →D ,第1,2,5行的A 同为a 1,把这三行的D 均改为b 14; ② 对E →D ,第2,3行的E 同为a 5,把这两行的D 均改为b 14; ③ 对D →B ,第1,2,3,5行的D 同为b 14,把这四行的B 均改为a 2; ④ 对BC →D ,第3,4,5行的BC 同为(a 2,a 3),把这三行的D 均改为a 4; ⑤ 对DC →A ,第3,4,5行的DC 同为(a 4,a 3),把这三行的A 均改为a 1; ⑥ 重复扫描F ,对A →D ,五行的A 同为a 1,把这五行的D 均改为a 4;⑦ 表格不能再修改了,算法终止,结果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.设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)所示,验证结果正确。
因为{AB}(F1)∪{AC}(F1) = A→B = F1 ;所以分解ρ1是保持函数依赖集F1的。