收藏 分享(赏)

数据库复习题全.doc

上传人:精品资料 文档编号:10884643 上传时间:2020-01-17 格式:DOC 页数:7 大小:78KB
下载 相关 举报
数据库复习题全.doc_第1页
第1页 / 共7页
数据库复习题全.doc_第2页
第2页 / 共7页
数据库复习题全.doc_第3页
第3页 / 共7页
数据库复习题全.doc_第4页
第4页 / 共7页
数据库复习题全.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、1数据库与管理信息系统 复习题一、简答题1. 试述数据库二级映像和数据独立性之间的关系DBMS 在三级模式之间提供二级映像“外模式|模式映像”和“模式| 内模式映像” ,保证了数据库的数据具有较高的逻辑独立性和物理独立性。数据库的二级映像保证了数据库外模式的稳定性,从底层保证了应用程序的稳定性,除非应用需求本身发生变化,否则应用程序一般不需要修改。数据库的三级模式与二级映像实现了数据与程序之间的独立性,使数据的定义和描述可以从应用程序中分离出来。另外,由于数据的存取由 DBMS 管理,用户不必考虑存取路径等细节,从而简化了应用程序的编制,大大降低了应用程序的维护和修改成本。2. 请举例说明在同

2、一个关系内部也可能存在参照的完整性约束。参照完整性约束是不同关系之间或一个关系的不同元组之间的制约。不仅在关系间存在引用,同一关系内部属性也可能存在引用关系。也就是说,参照完整性规则中,参照关系和目标关系(被参照关系)可以是同一个关系。比如对于关系“学生(学号,姓名,性别,专业号,年龄,班长) ”,主键是学号,班长属性表示该学生所在班级的班长的学好呢,这班长的属性实际引用了学号属性,也就是是说,班长必须是实际存在的学生的学号。3. 简述事务的特性。 (PPT 上只给出了四个特性,我又在后面加了每个特性的意思,作为参考)事务的:原子性、一致性、隔离性、持续性(1) 原子性事务的原子性指的是,事务

3、中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。这种特性称为原子性。(事务的原子性要求,如果把一个事务可看作是一个程序,它要么完整的被执行,要么完全不执行。就是说事务的操纵序列或者完全应用到数据库或者完全不影响数据库。这种特性称为原子性。假如用户在一个事务内完成了对数据库的更新,这时所有的更新对外部世界必须是可见的,或者完全没有更新。前者称事务已提交,后者称事务撤消(或流产) 。DBMS 必须确保由成功提交的事务完成的所有操纵在数据库内有完全的反映,而失败的事务对数据库完全没有影响)(2) 一致性事务的一致性指的是在一个事务执行之前和执行之后数据库都必

4、须处于一致性状态。即事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。这种特性称为事务的一致性。(假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。一致性处理数据库中对所有语义约束的保护。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。例如,当数据库处于一致性状态 S1 时,对数据库执行一个事务,在事务执行期间假定数据库的状态是不一致的,当事务执行结束时,数据库处在一致性状态 S2。)(3) 隔离性隔离性指并发的事务是相互隔离的。一个事务的执行不能被其他事物干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能相互干扰。(

5、隔离性是 DBMS 针对并发事务间的冲突提供的安全保证。DBMS 可以通过加锁在并发执行的事务间提供不同级别的隔离。假如并发交叉执行的事务没有任何控制,操纵相同的共享对象的多个并发事务的执行可能引起异常情况。DBMS 可以在并发执行的事务间提供不同级别的隔离。隔离的级别和并发事务的吞吐量之间存在反比关系。较多事务的可隔离性可能会带来较高的冲突和较多的事务流产。流产的事务2要消耗资源,这些资源必须要重新被访问。 )(4)持续性持久性也成永久性。指一个事务一旦提交,它对数据库中数据的改变应该是永久性的,接下来的其他操作或故障不应该对其执行结果有任何影响。持久性主要在于 DBMS 的恢复性能。4.

6、简述并发操作引发的问题。并发操作可能会破坏事务的隔离性,从而引发数据的一致性问题,主要包括丢失修改、不可重复读和读“脏”数据等问题。5. 什么是封锁协议,简述三级封锁协议。在运用封锁方法时,对数据对象加锁时需要需要约定一些规则,例如何时申请封锁、持续时间、何时释放封锁等。我们称这些规则为封锁协议。约定不同的规则,就形成了不同的封锁协议。三级封锁协议是一级封锁协议加上事务 T 在读取数据 R 之前必须先对其加 S 锁即共享锁,直到事务结束才释放。而一级封锁协议是:事务 T 在修改数据 R 之前必须先对其加 X 锁,直到事务结束才释放。三级封锁协议除防止了丢失修改和不读“脏”数据外,还进一步防止了

7、不可重复读。二、证明或推导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、b 23、b 53改为同一个符号 b13(取行号最小值)。(有 A 的相对就的行改)相同的改成一样的 根据 B

8、C,对上表进行处理,由于属性列 B 上第 2、3 行相同均为 a2,所以将属性列 C 上的b13、b 33改为同一个符号 b13(取行号最小值)。3 根据 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。 通过上

9、述的修改,使第三行成为 a1a2a3a4a5,则算法终止。且分解具有无损连接性。2.设关系模式 R(A, B, C, D), 其函数依赖集:F=DB, BD, ADB, ACD 求 R 的所有候选码。L 类: A, C4R 类:N 类: LR 类: B, D因为(AC)F+=ACDB,所以 AC 是 R 的唯一候选码。3.试证明,若并发事务遵守两段锁协议,则对这些事务的并发调度是可串行化的。证明:首先以两个并发事务 Tl 和 T2 为例,存在多个并发事务的情形可以类推。根据可串行化定义可知,事务不可串行化只可能发生在下列两种情况:( l )事务 Tl 写某个数据对象 A ,T2 读或写 A ;

10、 ( 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 的

11、锁,则出现死锁;否则, Tl 在对 x 、 Y 中对象全部处理完毕后,T2 才能执行。这相当于按 Tl 、T2 的顺序串行执行,根据可串行化定义, Tl 和几的调度是可串行化的。 2 )操作 先执行的情况与( l )对称因此,若并发事务遵守两段锁协议,在不发生死锁的情况下,对这些事务的并发调度一定是可串行化的。证毕。4.设关系模式 R(ABCD),F 是 R 上成立的 FD 集,F=ABCD,A D 。(1) 试说明 R 不是 2NF 模式的理由。(2) 试把 R 分解成 2NF 模式集。答: 从已知的函数依赖集 F,可知 R 的候选键是 AB。另外,由 ABCD 可推出 ABD ,再由AD

12、可知 ABD 是部分(局部)函数依赖,因此 R 不是 2NF 模式。 如果将 R 分解成 =AD,ABC,则 是 2NF 模式集。5. 设关系模式 R(ABC) ,F 是 R 上成立的 FD 集,F=CB ,BA。 试说明 R 不是 3NF 模式的理由。 试把 R 分解成 3NF 模式集。答: 从已知函数依赖集 F 可知,R 的候选键是 C。由 CB,B A 可知,C A 是一个传递依赖,因此 R 不是 3NF 模式。 此时如果将 R 分解成 =CB,BA,则 是 3NF 模式集。6.什么是 Armstrong 公理系统 的完备性,试对其进行证明。Armstrong 公理系统是有效的、完备的有

13、效性:由 F 出发根据 Armstrong 公理推导出来的每一个函数依赖一定在 F+中;完备性:F+中的每一个函数依赖,必定可以由 F 出发根据 Armstrong 公理推导出来只需证明逆否命题: 若函数依赖 XY 不能由 F 从 Armstrong 公理导出,那么它必然不为 F 所蕴含(1) 引理: 若 VW 成立,且 V XF+,则 W XF+ 因为 V XF+,所以 X-V 成立;于是 X-W 成立,所以 W XF+5(2) 构造一张二维表 r,它由下列两个元组构成,可以证明 r 必是 R(U,F)的一个关系,即 F+中的全部函数依赖在 r 上成立。XF+ U-XF+111 000 11

14、1 111 若人不是 R的关系,则必须由于 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

15、 学号 Char(8) 否 参照 student 表的 snocno 课程号 Char(2) 否 参照 course 表的 cnograde 成绩 Int 是 取值为 0-100use scgocreate table s_c(sno char(8),cno char(2),grade intconstraint 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)

16、on delete no action on update cascade,constraint s_c_refcno foreign key (cno) references course (cno) on delete no action on update cascade)go四、基于以上数据库,请写出满足下列查询要求的 SQL 语句。 查询有间接先行课的课程情况,包括课程名(cname),间接先行课的课程号(cpno),查询结果按课程名降序排列。 SELECT FIRST.Cno,SECOND.Cpno FROM Course FIRST,Course SECOND WHERE FIR

17、ST.Cpno = SECOND.Cno;查询学生“李勇”所选课程的课程名(cname)及成绩(grade)。 Select cname,grade from student,course,s_c where student.sno=s_c.sno and s_o=o and sname=李勇 查询学生“刘晨”所选课程的课程号(cno) 及成绩(grade),要求用“子查询”实现。 Select cno,grade 6 from s_c where sno in (select sno from student where sname=刘晨 ) 查询所有学生的考试情况(包括学号 sno,姓名

18、sname,课程名 cname,成绩 grade)。 Select student.sno,sname,cname,grade from (student left join s_c on student.sno=s_c.sno) left join course on s_o=o 查询系别 sdept=“IS”的每个学生的学号 sno,其所选课程的平均成绩,按平均成绩降序排序。 Select sno,avg(grade) from s_c group by sno having sno in (select sno from student where sdept=is ) order by

19、 avg(grade) desc五、设某个数据库中有两个表 products(pid, pname, pquantity)和 sales(saleid, pid, quantity)分别来记录商品的库存和销售情况,其中 pquantity 用来表示某种商品的库存量,quantity 用来表示某种商品的某次销量。请设计触发器完成某种商品的库存量随着销量的变化而变化。create trigger ins_triggeron salesafter insertas update productsset pquantity=pquantity-(select sum(quantity) from in

20、sertedwhere inserted.pid=products.pid)where products.pid in (select pid from inserted)Gocreate trigger upd_triggeron salesafter updateasbegin /*收回旧值*/update productsset pquantity=pquantity+(select sum(quantity) from deletedwhere deleted.pid=products.pid)where products.pid in (select pid from deleted

21、)/*减去新值*/update productsset pquantity=pquantity-7(select sum(quantity) from insertedwhere inserted.pid=products.pid)where products.pid in (select pid from inserted)end Gocreate trigger del_triggeron salesfor deleteasupdate productsset pquantity=pquantity+(select sum(quantity) from deletedwhere deleted.pid=products.pid)where products.pid in (select pid from deleted)go

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报