数据库复习题全(6页).doc
-数据库复习题全-第 6 页数据库与管理信息系统 复习题一、简答题1. 试述数据库二级映像和数据独立性之间的关系DBMS在三级模式之间提供二级映像“外模式|模式映像”和“模式|内模式映像”,保证了数据库的数据具有较高的逻辑独立性和物理独立性。数据库的二级映像保证了数据库外模式的稳定性,从底层保证了应用程序的稳定性,除非应用需求本身发生变化,否则应用程序一般不需要修改。数据库的三级模式与二级映像实现了数据与程序之间的独立性,使数据的定义和描述可以从应用程序中分离出来。另外,由于数据的存取由DBMS管理,用户不必考虑存取路径等细节,从而简化了应用程序的编制,大大降低了应用程序的维护和修改成本。2. 请举例说明在同一个关系内部也可能存在参照的完整性约束。参照完整性约束是不同关系之间或一个关系的不同元组之间的制约。不仅在关系间存在引用,同一关系内部属性也可能存在引用关系。也就是说,参照完整性规则中,参照关系和目标关系(被参照关系)可以是同一个关系。比如对于关系“学生(学号,姓名,性别,专业号,年龄,班长)”,主键是学号,班长属性表示该学生所在班级的班长的学好呢,这班长的属性实际引用了学号属性,也就是是说,班长必须是实际存在的学生的学号。3. 简述事务的特性。(PPT上只给出了四个特性,我又在后面加了每个特性的意思,作为参考)事务的:原子性、一致性、隔离性、持续性(1) 原子性事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。这种特性称为原子性。(事务的原子性要求,如果把一个事务可看作是一个程序,它要么完整的被执行,要么完全不执行。就是说事务的操纵序列或者完全应用到数据库或者完全不影响数据库。这种特性称为原子性。假如用户在一个事务内完成了对数据库的更新,这时所有的更新对外部世界必须是可见的,或者完全没有更新。前者称事务已提交,后者称事务撤消(或流产)。DBMS必须确保由成功提交的事务完成的所有操纵在数据库内有完全的反映,而失败的事务对数据库完全没有影响)(2) 一致性事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。即事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。这种特性称为事务的一致性。(假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。一致性处理数据库中对所有语义约束的保护。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。例如,当数据库处于一致性状态S1时,对数据库执行一个事务,在事务执行期间假定数据库的状态是不一致的,当事务执行结束时,数据库处在一致性状态S2。)(3) 隔离性隔离性指并发的事务是相互隔离的。一个事务的执行不能被其他事物干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能相互干扰。(隔离性是DBMS针对并发事务间的冲突提供的安全保证。DBMS可以通过加锁在并发执行的事务间提供不同级别的隔离。假如并发交叉执行的事务没有任何控制,操纵相同的共享对象的多个并发事务的执行可能引起异常情况。DBMS可以在并发执行的事务间提供不同级别的隔离。隔离的级别和并发事务的吞吐量之间存在反比关系。较多事务的可隔离性可能会带来较高的冲突和较多的事务流产。流产的事务要消耗资源,这些资源必须要重新被访问。)(4)持续性持久性也成永久性。指一个事务一旦提交,它对数据库中数据的改变应该是永久性的,接下来的其他操作或故障不应该对其执行结果有任何影响。持久性主要在于DBMS的恢复性能。4. 简述并发操作引发的问题。并发操作可能会破坏事务的隔离性,从而引发数据的一致性问题,主要包括丢失修改、不可重复读和读“脏”数据等问题。5. 什么是封锁协议,简述三级封锁协议。在运用封锁方法时,对数据对象加锁时需要需要约定一些规则,例如何时申请封锁、持续时间、何时释放封锁等。我们称这些规则为封锁协议。约定不同的规则,就形成了不同的封锁协议。三级封锁协议是一级封锁协议加上事务T在读取数据R之前必须先对其加S锁即共享锁,直到事务结束才释放。而一级封锁协议是:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。三级封锁协议除防止了丢失修改和不读“脏”数据外,还进一步防止了不可重复读。二、证明或推导1. 已知关系模式R的属性集合U=A,B,C,D,E。函数依赖集合F=A->C,B->C,C->D,DE->C,CE->A,分解=R1(A,D),R2(A,B),R3(B,E),R4(C,D,E),R5(A,E)。请验证是否具有无损联接性解:用判断无损连接的算法来解。 构造一个初始的二维表,若“属性”属于“模式”中的属性,则填aj,否则填bij。 根据AC,对上表进行处理,由于属性列A上第1、2、5行相同均为a1,所以将属性列C上的b13、b23、b53改为同一个符号b13(取行号最小值)。(有A的相对就的行改)相同的改成一样的 根据BC,对上表进行处理,由于属性列B上第2、3行相同均为a2,所以将属性列C上的b13、b33改为同一个符号b13(取行号最小值)。 根据CD,对上表进行处理,由于属性列C上第1、2、3、5行相同均为b13,所以将属性列D上的值均改为同一个符号a4。(因为C也依赖于A ,B) 根据DEC,对上表进行处理,由于属性列DE上第3、4、5行相同均为a4a5,所以将属性列C上的值均改为同一个符号a3。 根据CEA,对上表进行处理,由于属性列CE上第3、4、5行相同均为a3a5,所以将属性列A上的值均改为同一个符号a1。 通过上述的修改,使第三行成为a1a2a3a4a5,则算法终止。且分解具有无损连接性。2.设关系模式R(A, B, C, D), 其函数依赖集:F=DB, BD, ADB, ACD 求R的所有候选码。 L类: A, C R类: N类: LR类: B, D因为(AC)F+=ACDB,所以AC是R的唯一候选码。3. 试证明,若并发事务遵守两段锁协议,则对这些事务的并发调度是可串行化的。证明:首先以两个并发事务 Tl 和T2为例,存在多个并发事务的情形可以类推。根据可串行化定义可知,事务不可串行化只可能发生在下列两种情况:( l )事务 Tl 写某个数据对象 A ,T2读或写 A ( 2 )事务 Tl 读或写某个数据对象 A ,T2写 A 。下面称 A 为潜在冲突对象。设 Tl 和T2访问的潜在冲突的公共对象为A1,A2 , An 。不失一般性,假设这组潜在冲突对象中 X (A 1 , A2 , , Ai 均符合情况 1 。 Y A i + 1 , , An 符合所情况( 2 )。VX x , Tl 需要 XlockX T2 需要 Slockx 或 Xlockx 1 )如果操作 先执行,则 Tl 获得锁,T2等待由于遵守两段锁协议, Tl 在成功获得 x 和 Y 中全部对象及非潜在冲突对象的锁后,才会释放锁。这时如果存在 w x 或 Y ,T2已获得 w 的锁,则出现死锁;否则, Tl 在对 x 、 Y 中对象全部处理完毕后,T2才能执行。这相当于按 Tl 、T2的顺序串行执行,根据可串行化定义, Tl 和几的调度是可串行化的。 2 )操作 先执行的情况与( l )对称因此,若并发事务遵守两段锁协议,在不发生死锁的情况下,对这些事务的并发调度一定是可串行化的。证毕。4.设关系模式R(ABCD),F是R上成立的FD集,F=ABCD,AD。 (1) 试说明R不是2NF模式的理由。(2) 试把R分解成2NF模式集。答: 从已知的函数依赖集F,可知R的候选键是AB。另外,由ABCD可推出ABD,再由AD可知ABD是部分(局部)函数依赖,因此R不是2NF模式。 如果将R分解成=AD,ABC,则是2NF模式集。5. 设关系模式R(ABC),F是R上成立的FD集,F=CB,BA。 试说明R不是3NF模式的理由。 试把R分解成3NF模式集。答: 从已知函数依赖集F可知,R的候选键是C。由CB,BA可知,CA是一个传递依赖,因此R不是3NF模式。 此时如果将R分解成=CB,BA,则是3NF模式集。6. 什么是Armstrong公理系统的完备性,试对其进行证明。Armstrong公理系统是有效的、完备的有效性:由F出发根据Armstrong公理推导出来的每一个函数依赖一定在F+中;完备性:F+中的每一个函数依赖,必定可以由F出发根据Armstrong公理推导出来只需证明逆否命题: 若函数依赖XY不能由F从Armstrong公理导出,那么它必然不为F所蕴含(1) 引理: 若VW成立,且V XF+,则W XF+ 因为VXF+,所以X->V成立;于是X->W成立,所以WXF+(2) 构造一张二维表r,它由下列两个元组构成,可以证明r必是R(U,F)的一个关系,即F+中的全部函数依赖在 r上成立。 XF+ U-XF+ 11.1 00.0 11.1 11.1 若人不是R<U,F>的关系,则必须由于F中某一个函数依赖V->W 在r上不成立所致。由r的构成可知。若XY 不能由F从Armstrong公理导出,则Y 不是XF+ 的子集。三、某数据库有三个表:student(sno, sname, ssex, sage, sdept),course(cno, cname, cpno, ccredit),s_c(sno, cno, grade),其中S_C表详细完整性约束条件如下所示,写出在SQL SERVER服务器中建立S_C表的T-SQL语句。字段名字段含义数据类型允许为空默认值约束条件sno学号Char(8)否参照student表的snocno课程号Char(2)否参照course表的cnograde成绩Int是取值为0-100use scgocreate table s_c (sno char(8), cno char(2), grade int constraint grade_ch check(grade>=0 and grade<=100), constraint s_c_p primary key (sno,cno), constraint s_c_refsno foreign key (sno) references student (sno) on delete no action on update cascade, constraint s_c_refcno foreign key (cno) references course (cno) on delete no action on update cascadego四、基于以上数据库,请写出满足下列查询要求的SQL语句。l 查询有间接先行课的课程情况,包括课程名(cname),间接先行课的课程号(cpno),查询结果按课程名降序排列。l FROM Course FIRST,Course SECONDl WHERE FIRST.Cpno = SECOND.Cno;查询学生“李勇”所选课程的课程名(cname)及成绩(grade)。l Select cname,gradel from student,course,s_c l where student.sno=s_c.sno and s_o=o and sname=李勇l 查询学生“刘晨”所选课程的课程号(cno)及成绩(grade),要求用“子查询”实现。l Select cno,grade l from s_c where sno in l (select sno from student l where sname=刘晨)l 查询所有学生的考试情况(包括学号sno,姓名sname,课程名cname,成绩grade)。l Select student.sno,sname,cname,gradel from (student left join s_c on student.sno=s_c.sno) l 查询系别sdept=“IS”的每个学生的学号sno,其所选课程的平均成绩,按平均成绩降序排序。l Select sno,avg(grade)l from s_c group by sno l having sno in l (select sno from student l where sdept=is ) l order by avg(grade) desc五、设某个数据库中有两个表products(pid, pname, pquantity)和sales(saleid, pid, quantity)分别来记录商品的库存和销售情况,其中pquantity用来表示某种商品的库存量,quantity用来表示某种商品的某次销量。请设计触发器完成某种商品的库存量随着销量的变化而变化。create trigger ins_triggeron salesafter insertas update products set pquantity=pquantity- (select sum(quantity) from inserted where inserted.pid=products.pid) where products.pid in (select pid from inserted)Gocreate trigger upd_triggeron salesafter update as begin /*收回旧值*/ update products set pquantity=pquantity+ (select sum(quantity) from deleted where deleted.pid=products.pid) where products.pid in (select pid from deleted) /*减去新值*/ update products set pquantity=pquantity- (select sum(quantity) from inserted where inserted.pid=products.pid) where products.pid in (select pid from inserted) end Gocreate trigger del_triggeron salesfor deleteasupdate products set pquantity=pquantity+ (select sum(quantity) from deleted where deleted.pid=products.pid) where products.pid in (select pid from deleted)go