数据库原理试题库 联系客服

发布时间 : 星期一 文章数据库原理试题库更新完毕开始阅读497329ee783e0912a2162ae1

原因是:在多粒度封锁方法中一个数据对象可能以两种方式加锁 —显式封锁和隐式封锁。因此系统在对某一数据对象加锁时不仅要检查该数据对象上有无(显式和隐式)封锁与之冲突;还要检查其所有上级结点和所有下级结点,看申请的封锁是否与这些结点上的(显式和隐式)封锁冲突;显然,这样的检查方法效率很低。为此引进了意向锁。 意向锁的含义是:对任一结点加锁时,必须先对它的上层结点加意向锁。

例如事务 T要对某个元组加X锁,则首先要对关系和数据库加IX锁。换言之,对关系和数据库加IX锁,表示它的后裔结点—某个元组拟(意向)加X锁。

引进意向锁后,系统对某一数据对象加锁时不必逐个检查与下一级结点的封锁冲突了。例如,事务 T要对关系R加X锁时,系统只要检查根结点数据库和R本身是否已加了不相容的锁(如发现已经加了IX,则与X冲突),而不再需要搜索和检查R中的每一个元组是否加了X锁或S锁。

89. 试述常用的意向锁:IS锁,IX锁,SIX锁,给出这些锁的相容矩阵。

答:

IS锁 ——如果对一个数据对象加 IS锁,表示它的后裔结点拟(意向)加S锁。例如,要对某个元组加S锁,则要首先对关系和数据库加IS锁 。

IX锁:——如果对一个数据对象加 IX锁,表示它的后裔结点拟(意向)加X锁。例如,要对某个元组加X锁,则要首先对关系和数据库加IX锁。

SIX锁——如果对一个数据对象加 SIX锁,表示对它加S锁,再加IX锁,即SIX = S + IX。

相容矩阵(略)

90. 什么是封锁协议?不同级别的封锁协议的主要区别是什么?

答:在运用封锁技术对数据加锁时,要约定一些规则。例如,在运用 X锁和S锁对数据对象加锁时,要约定何时申请X锁或S锁、何时释放封锁等。这些约定或者规则称为封锁协议(Locking Protocol)。对封锁方式约定不同的规则,就形成了各种不同的封锁协议。不同级别的封锁协议,例如《概论》中介绍的三级封锁协议,三级协议的主要区别在于什么操作需要申请封锁,何时申请封锁以及何时释放锁(即持锁时间的长短)。

一级封锁协议:事务 T在修改数据R之前必须先对其加X锁,直到事务结束才释放。 二级封锁协议:一级封锁协议加上事务 T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。

三级封锁协议:一级封锁协议加上事务 T在读取数据R之前必须先对其加S锁,直到事务结束才释放。

91. 不同封锁协议与系统一致性级别的关系是什么? 答:不同的封锁协议对应不同的一致性级别。

一级封锁协议可防止丢失修改,并保证事务 T是可恢复的。在一级封锁协议中,对读数据是不加S锁的,所以它不能保证可重复读和不读“脏”数据。

二级封锁协议除防止了丢失修改,还可进一步防止读 “脏”数据。在二级封锁协议中,由于读完数据后立即释放S锁,所以它不能保证可重复读。 在三级封锁协议中,无论是读数据还是写数据都加长锁,即都要到事务结束时才释放封锁。所以三级封锁协议除防止了丢失修改和不读 “脏”数据外,还进一步防止了不可重复读。

45

92. 数据库是一个共享资源,在多用户共享系统中,并发操作的含义是什么?

答:在多用户共享系统中,多个用户同时对同一数据进行操作称为并发操作。

1.设关系模式R(A,B) 和S(C,D),有关系代数表达式E = πA,C(σB = ?d?(R×S)),请画出表达式E的语法树。

2.什么是分布式数据库的分布透明性?

答: 分布透明性是指用户不必关心数据的逻辑分片,不必关心数据物理位置分配的细节,也不必关心各个场地上数据库的数据模型。 3.什么是对象关系数据模型?

答:在传统的关系数据模型基础上,提供元组、数组、集合等数据类型以及处理新的数据类型操作的能力,这样形成的数据模型,称为“对象关系数据模型”。 4.简述ORDBS的中文含义。

答:基于对象关系数据模型的DBS称为对象关系数据库系统(ORDBS) 5.没有关系R和S如下,写出R÷S计算结果。

R A B C a 1 2 b 1 2 b 3 4 c 1 2 d 3 4 S b C 1 2 3 4 R÷S计算结果R÷S

六、 设计题

1.设有描述学校情况的U关系。

U(S#,SD,MN,CN,G)

其中:S#属性表示学生学号,SD表示学生所在系名,MN表示系主任,CN表示课程名,G表示成绩。一个系有若干名学生,一个学生只属于一个系,一个系只有一名系主任,一个学生可选多门课,每个学生选每门课有一个成绩。试写出U关系中的函数依赖,并给每个函数依赖一个简短说明。 答:S#→SD 学生学号,决定其所在系名; SD→MN 系名决定了其所在系的系主任; S#,CN→G学号和课程决定该生此课程的成绩。

2.设有关系:职工关系EMPLOYEE (职工号,职工名,街道,城市)

工作关系WORKS (职工号,公司号,工资) 公司关系COMPANY (公司号,公司名,城市) (1) 假设一个职工可在多个公司兼职,请用关系代数表达式写出至少在公司号为?C2?和?C5?公司兼职的职工的职工号。

46

(2)试用SQL语句写出下列操作:将所有在“联华公司”工作的职工加薪5﹪。

UPDATE WORKS

SET工资 = 工资 * 1.05 WHERE公司号IN (SELECT公司号 FROM COMPANY

WHERE公司名 =?联华公司?);

3.图书出版管理数据库中有两个基本表:

图书 (书号,书名,作者编号,出版社,出版日期) 作者 (作者编号,作者名,年龄,地址)

试用SQL语句写出下列查询:检索年龄低于作者平均年龄的所有作者的作者名、书名和出版社。

SELECT 作者名,书名,出版社

FROM 图书,作者

WHERE 图书 . 作者编号 = 作者 . 作者编号 AND 年龄 < = (SELECT AVG (年龄) FROM 作者);

4.学校有多名学生,财务处每年要收一次学费。为财务处收学费工作设计一个数据库,包括两个关系:

学生 (学号,姓名,专业,入学日期) 收费 (学年,学号,学费,书费,总金额)

假设规定属性的类型:学费、书费、总金额为数值型数据;学号、姓名、学年、专业为字符型数据;入学日期为日期型数据。列的宽度自定义。

试用SQL语句定义上述表的结构。(定义中应包括主键子句和外键子句) CREATE TABLE 学生 (学号 CHAR (8), 姓名 CHAR (8), 专业 CHAR (13), 入学日期 DATE,

PRIMARY KEY (学号)); CREATE TABLE 收费 (学年 CHAR (10), 学号 CHAR (8), 学费 NUMERIC (4), 书费 NUMERIC (5,2), 总金额 NUMERIC (7,2), PRIMARY KEY (学年,学号),

FOREIGN KEY (学号) REFERENCES 学生 (学号));

47

5.在“学生一选课一课程”数据库中的3个关系如下:

学生(学号,姓名,年龄,性别,班级) 选课(学号,课程号,成绩)

课程(课程号,课程名,学分,学时,任课教师) .

(一)试用关系代数表达式和SQL语言表示下列查询要求。 (1) 查询选修了课程名为DB的学生姓名和所在班级。

Π姓名,班级(学生∞选课∞ σ课程名='DB' (课程)) SELECT 姓名,姓名, 班级 FROM 学生

WHERE 学号 IN (SELECT 学号 FROM 选课,课程 WHERE 选课.课程号=课程.课程号 AND 课程名='DB') (2) 查询?刘军?老师所授课程的课程号、课程名。

π课程号,课程名(σ任课教师='刘军'(课程))

SELECT 课程号,课程名 FROM 课程 WHERE 任课教师=?LIU? (3) 求选修课程包含“刘军”老师所授课程之一的学生学号 (4) 查询年龄大于23岁的男学生的学号与姓名。 π学号,姓名(σ年龄>'23'∧性别='男'(学生))

SELECT 学号,姓名 FROM S WHERE (年龄>23) AND (性别=?男?) (5) 查询学号为S3学生所学课程的课程名与任课教师名。

π课程名,任课教师(σ学号='S3'∧选课.课程号=C.课程号(选课×课程))

(也可将两个关系自然连接后选择、投影)

π课程名,任课教师(σ学号='S3' ( 学生∞选课))

(6) 查询至少选修LIU老师所授课程中一门课程的女学生的姓名。

π姓名(σ性别='女'∧任课教师='刘军'(学生∞选课∞课程))

SELECT 姓名 FROM 学生 WHERE 性别=?女? AND 学号 IN (SELECT 学号 FROM 选课 WHERE 课程号 IN

(SELECT 课程号 FROM 课程 WHERE 任课教师=?LIU?)

(7) 查询WANG同学不学的课程号。

π课程号(选课)- π课程号(σ姓名='WANG'∧学生.学号=选课.学号(学生×选课))

SELECT 课程号 FROM C WHERE 课程号 NOT IN (SELECT 课程号 FROM 选课 WHERE 学号 IN

48