一、填空题(每空 1 分,共 10 分)
- 数据模型的三要素包括:数据结构、 数据操纵 、完整性约束。
- 数据库系统的三级模式和二级映像中外模式/模式映像 保证了数据与程序的逻辑独立性。
- 概念模型是对信息世界的建模,其表示方法我们常使用 E-R 图来描述。
- 关系代数的五种基本查询操作有选择、投影、并、差、 笛卡尔积 。
- 写出实现“ 赋权用户 U1 对学生表(STUD) 的查询权” 这一功能的 SQL 语句:Grant select on table STUD to U1; 。
- SQL 中创建数据库对象使用 create 关键字;删除数据库对象使用 drop 关键字。
- 在基于日志的数据库数据恢复技术中, 对发生故障时没有完成的事务应执行Undo 操作。
- 查询优化有多种方法,按照优化的层次可以分为 代数优化 和物理优化。
- 两段锁协议中,在释放一个*以后,规定事务 不再申请和获得任何其他* 。
- 在 2NF 的基础上,消除了 传递函数依赖 以后的关系模式,属于 3NF。
二、单项选择题(每小题 2 分,共 40 分)
- 数据库系统中 是数据库全体数据的逻辑结构和特征的描述 (B )
A.内模式 B. 模式 C. 外模式 D.视图
2.关于 E-R 方法中的联系,下列说法正确的是(A )
①联系必须有命名
②多个实体间也可以有联系
③单个实体间也可以有联系
④联系也可以有属性
A.①②③④ B. ①③④ C. ①②③ D. ②③④
3.在数据库物理设计阶段,建立索引的目的是为了提高数据的(C )
更改效率 B. 插入效率 C. 查询效率 D. 删除效率
4.设关系 R、S、W 各有 10 个元组,那么这 3 关系的自然联接的元组个数为多少(D)
A. 10 B. 30 C.1000 D.不确定
5.一个 M 行 N 列的关系,和一个 K 行 L 列的关系进行笛卡尔积,生成目标关系的列数为
( D)
A.M*K B.M+K C.N*L D.N+L
6.在关系数据库中,NULL 是一个特殊值,在很多数据操作中都需要对 NULL 进行特殊处理。关于 NULL,下列说法正确的是 ( B )
A.判断元组的某一列是否为 NULL 一般使用“=NULL”
B.NULL 在数据库中表示尚不确定的值
C.对数值型数据,NULL 等价于 0
D.NULL 只适用于字符和数值类型
7.在视图上不能完成的操作是(D )
A.在视图上定义新的视图
B. 查询操作
C.更新操作
D. 在视图上定义新的基本表
8.SQL 查询中 谓词后面只能引出子查询(B )
A.[NOT] IN B.[NOT] EXISTS
C.[NOT]BETWEEN AND D.比较运算符
9.当关系 R(左)和 S(右)自然连接时,能够把 S 中原该舍弃的元组保留到结果关系中的操作是(B )
A.左外连接 B.右外连接 C.外部并 D.外连接
10.违反参照完整性时的系统处理方法,不包括 (C )
A. 拒绝执行 B. 级联操作 C. 系统自动修正 D. 设置为空
11.在数据库设计中,将 E-R 图转换成关系数据模型的过程属于(B )
A.需求分析阶段 B.逻辑设计阶段
C.概念设计阶段 D.物理设计阶段
12.E-R 图向关系模型转换原则中,一个 M:N 的联系(A)
A.转换为一个独立的关系模式 B. 与 M 端对应的实体关系模式合并
C.与 N 端对应的实体关系模式合并 D. 与任意一端实体关系模式合并
13. 在 ARMSTRONG 公理系统中,下列结论错误的是(C )
A.若 A→B, B→C 则 A→C
B.若 A→B, A→C 则 A→(B,C)
C.若 B→A, C→A 则(B,C)→A
D.若(B,C)→A 则 B→A, C→A
14.任给关系 R<U>,X 和 Y 是 U 的子集,若 X 既不函数决定 Y,又不函数依赖于 Y,则 X 与Y 间的联系为(D )
A.1:1 B.1:N C.N:1 D.M:N
15.关于函数依赖,以下说法错误的是(C)
A.平凡的函数依赖不反映语义信息
B.函数依赖具有传递性
C.函数依赖的决定部分一定要包含有码
D.关系的码可以函数决定关系的每一个属性
16.若关系 R 的候选键都是由单属性构成的,则 R 至少应为(B ).
A.1NF B. 2NF C. 3NF D. BCNF
17.事务的多个性质,其中不包括(B )
A.一致性 B.唯一性 C 原子性 D.隔离性
解析:ACID(原子性,一致性,隔离性,持久性)。
18.对基于检查点的恢复技术,下列说法中错误的是(A )
A.无论事务在检查点之前还是之后提交,都需执行 REDO 操作
B.检查点技术可以提高恢复效率
C.检查点可以定期建立
D.能最大限度的减少恢复数据库时根据日志记录所需执行的恢复操作
19.设有两个事务 T1 和 T2,它们的并发操作如图所示。对于这个并发操作,下列评价正确的是( A)
|
T1 |
T2 |
① |
读 A=10 |
|
② |
|
读 A=10 |
③ |
A=A-5 写回 |
|
④ |
|
A=A-8 写回 |
A、该操作丢失了更新 B、该操作不能重复读C、该操作读脏数据 D、该操作不存在问题
20.并发事务的调度时,以下说法正确的是(B )
A. 调度是可串行化的,则是正确调度
B. 2PL 隐含预防死锁的一次*法
C. 一个可串行化的调度一定不会产生死锁
D. 死锁可以通过“先来先服务”解决
解析:D.避免活锁使用先来先服务算法。
三、简答题(每小题 5 分,共 10 分)
1、简要描述查询处理中实现连接操作的嵌套循环算法(nested loop)。
首先按连接属性对表1和表2排序
对表1的第一个元组,从头开始扫描表2,顺序查找满足连接条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。当遇到表2中第一条大于表1连接字段值的元组时,对表2的查询不再继续
找到表1的第二条元组,然后从刚才的中断点处继续顺序扫描表2,查找满足连接条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。直到遇到表2中大于表1连接字段值的元组时,对表2的查询不再继续
重复上述操作,直到表1或表2中的全部元组都处理完毕为止
2、什么是活锁?什么是死锁?在事务调度中,如何预防和解决死锁?
如果事务T 1 *了数据R事务T 2 又请求*R于是T 2 等待。T 3 也请求*R当T 1 释放了R上的*之后系统首先批准了T 3 的请求T 2 仍然等待。然后T 4 又请求*R当T 3 释放了R上的*之后系统又批准了T 4 的请求……T 2 有可能永远等待这就是活锁的情形.
如果事务T1*了数据R1,T2*了数据R2,然后T1又请求*R2,因T2已*了R2,于是T1等待T2释放R2上的锁;接着T2又申请*R1,因T1已*了R1,T2也只能等待T1释放R1上的锁。这样就出现了T1在等待T2,而T2又在等待T1的局面,T1和T2两个事务永远不能结束,形成死锁。
采用一次*法和顺序*法预防死锁。
采用超时法和等待图法来解决死锁
四、应用题(共 20 分)
设有如下图书借阅关系模式:
图书:Book(bno, bname, author, publisher, price, stocks)/*图书编号,图书名,作者,出版商,单价,库存*/
读者:Reader(rno, rname, address)/*读者编号,读者名,住址*/
借阅:Borrow(bno, rno, b_date , r_date, flag)/*图书编号,读者编号,借期,还期,还书标志{1.已还,0.未还}*/
- 用关系代数表达式实现以下题目:
- 检索读者’ 李林’ 所借图书中未还的书名。(2 分)
- 检索借阅了包含读者 ’李林’ 所有借阅图书的读者姓名。(2 分)
Flag=0,rname=’李林’
- πbname(σFlag=0∧rname=’李林’ (Borrow∞Reader∞Book)
2. πrname,rno(Borrow∞Reader)÷ πrno(σrname=‘李林‘ (Reader))
2.使用 SQL 语言实现如下题目:
- 检索借阅图书号为 ’B5’ 的所有读者姓名。(2 分)
Bno=’B5’(Book),rname(Reader)
Select rname from Book,Reader,Borrow where Book.bno=Borrow.bno and
Reader.rno=Borrow.rno and Borrow.bno=’B5’;
2.使用 SQL 语言实现如下题目:
(1)检索借阅图书号为 ’B5’ 的所有读者姓名。(2 分)
Bno=’B5’(Book),rname(Reader)
Select rname from Book,Reader,Borrow where Book.bno=Borrow.bno and
Reader.rno=Borrow.rno and Borrow.bno=’B5’;
(2)检索读者’ 李林’ 所借图书中未还的书名。(2 分)
(3)建立有未还图书的读者姓名和地址的视图。(2 分)
(2)rname=’李林’,flag=0
Select bname from Book,Reader,Borrow where Book.bno=Brrow.bno and
Reader.rno=Borrow.rno and Borrow.flag=0 and rname=’李林’;
(3)create view view1(rname,address) as select rname,address from Reader,Borrow
where Reader.rno=Borrow.rno and Borrow.flag=0 ;
五、综合题(每小题 10 分,共 10 分)
4.对于查询:找出 ‘2012-01-01’日前 到期还书的图书名和读者名。
(1)用 SQL 语句实现此查询。(2 分)
(2)将上面问题转化为关系代数表达式(操作限定为关系代数的 5 种基本运算)。(2 分)
(3)画出上面关系代数表达式的语法树。(3 分)
(4)使用代数优化,画出优化后的语法树。(3 分)
答:
(1)r_data>20120101,flag=0,查询结果为图书名(bname)和读者名(rname)
Select bname,rname from Book,Reader,Borrow where Book.bno=Borrow.bno and Reader.rno=Borrow.rno and r_data>20120101 and flag=0;
(2)πbname,rname(σFlag=0∧r_data>’20120101’ (Borrow∞Reader∞Book))
(3)主要是了解一下关系代数表达式语法树即可,一般用到语法树就是5种关系代数之间的复合了。了解即可
五、综合题(每小题 10 分,共 10 分)
设有关系模式R<U,F> 其中 U=(A,B,C,D,E,P),定义在其上的函数依赖为 F={CE→B,A→B,C→D,E→A,CE→P},
(1)求(CE)关于函数依赖集 F 的闭包。(3 分)
解:X0=CE C->D E->A CE->P CE->B X1=CEDAPB 因为X1已经等于全部属性的集合,所以(CE)^(+)F=ABCDEP
(2)说明 CE 应该具有什么性质。(2 分)
CE是关系模式中的码
(3)判断CE→B 是否是多余的函数依赖关系?如果是,请证明 F-{CE→B}逻辑蕴含 CE→B。(5 分)
答:CE->B是多余的函数依赖关系。证明:设u,v为R中任意两个元祖:若去掉CE->B,则有u[CE]=v[CE],且u[B]=v[B],而且E->A,A->B,E->B,CE->B,即u[CE]=v[CE],u[B]=v[B],满足题意。故F-{CE→B}逻辑蕴含 CE→B。
六、数据库设计题(每小题 10 分,共 10 分)
设有高校选课系统,需要对学校的系信息、教师信息、课程信息、学生信息、学生选课信息进行管理。已知系(DEPT)信息包括系编号(DeptNO)、系名称(DeptName),教师
(Teacher)信息包括教师号(TNO)、教师名(Tname),课程(Course)信息包括课程号
(CNO)、课程名(CName)、课程学分(Credit),学生(Student)信息包括学号(SNO)、学生姓名(Sname)、学生性别(Sex)。
选课系统的管理规则如下:
Ⅰ、一个系可聘用多名教师,一个教师只受聘于一个系; Ⅱ、一个系可有多名学生,一个学生只属于一个系;
Ⅲ、一名教师可讲授多门课程,一门课程可被多个教师讲授;
Ⅳ、一名学生可选修多门课程,一门课程可被多名学生选修; Ⅴ、学生选修完课程后,可获得相应课程的成绩。
针对以上描述,完成下列设计内容:
- 构建选修课系统的 ER 图。(5 分)
- 根据所构建的 ER 图,设计满足 3NF 的关系模式,并标出每个关系模式的主码和外码。(要求关系模式名同实体集名或联系名,属性名用试卷中给出的英文名,大小写不限)
(5 分)
解:(1)
(2)满足3NF的关系模式如下所示:
DEPT(DeptNO,DeptName)主码DeptNO【系编号】,无外码 注:DeptName系名称不能唯一确定其它属性,故不是外码
Teacher(TNO,TName,DeptNO)主码TNO【教师号】,外码DeptNO 【系编号】注:系编号(DeptNO)可以唯一确定系名称(DeptName)
Student(SNO,SName,Sex,DeptNO)主码SNO,外码DeptNO
Course(CNO,CName,Credit)主码CNO,无外码
T-C(TNO,CNO)主码(TEO,CNO),外码TNO,CNO 注:教师号(TNO)能唯一确定教师名(Tname),课程号
(CNO)能唯一确定课程名(CName):
S-C(SNO,CNO,成绩)主码(SNO,CNO),外码SNO,CNO
[解析] 建立相应的E-R图的过程如下:
①确定实体类型。②确定联系类型。
③把实体类型和联系类型组合成E-R图。④确定实体类型和联系类型的属性。
如果一个关系模式R是一个范式,且不存在非主属性传递依赖于主码,则R是一个3NF。