在决定因素中去掉E 求得:Bf+=B
∵C不属于Bf+ ∴不能以B→C代替BE→C ∴BE→C不冗余 考虑CE→F:
在决定因素中去掉C。 求得:Ef+=E
∵F不属于Af+ ∴不能以E→F代替CE→F 在决定因素中去掉E 求得:Cf+=CA
∵F不属于Cf+ ∴不能以C→F代替CE→F ∴CE→F不冗余 考虑CF→B:
在决定因素中去掉C。 求得:Ff+=F
∵B不属于Ff+ ∴不能以F→B代替CF→B 在决定因素中去掉F 求得:Cf+=CA
∵B不属于Cf+ ∴不能以C→B代替CF→B ∴CF→B不冗余 考虑CF→D:
在决定因素中去掉C。 求得:Ff+=F
∵D不属于Ff+ ∴不能以F→D代替CF→D 在决定因素中去掉F 求得:Cf+=CA
∵D不属于Cf+ ∴不能以C→D代替CF→D ∴CF→D不冗余
Fm={AB→E, BE→C,,CE→F,CF→B,CF→D,C→A, D→E,D→F} 6.答:
1)是BCNF。二元关系中或为全码,或为一个单属性码候选码。 2)是BCNF。关系模式中只有一个候选码。
3)不是BCNF。因为模式中存在候选码为AD、BCD和BE,显然C对AD是部分依赖。 7.答:
∵U1∩U2=E U1-U2=AB
U1∩U2→U1-U2={E→AB}={E→A,E→B} U1∩U2→U1-U2∈F+ ∴该分解具备无损连接。 8.答:
1)R的主码为IBO。
2)Fm={S→D,I→S,I→Q,B→Q} 令ρ=BOISQD
a. a. 由于R的码为IBO,选择S→D分解 得出: ρ={S1,S2}
其中:S1=SD, F1={S→D}
S2=BOISQ, F2={I→S,I→Q,B→Q}。 显然,S2不服从BCNF,需继续分解。
b.对S2分解。S2的码为IBO,选择I→S分解。 得出:ρ={S1,S3,S4}。
其中:S3=IS, F3={I→S}
S4=BOIQ, F4={I→Q,B→Q}。
显然,S4不服从BCNF,还需继续分解。
c.对S4分解。S4的码为IBO,选择I→Q分解。 得出:ρ={S1,S3,S5,S6} 其中 S5=IQ, F5={I→Q}
S6=BIO F6=Φ
d.最后的分解为:ρ={SD,IS,IQ,BIO} 9.答:
正确。因为学号能够多值决定课程号。 10.答:
BCNF。由于A多值依赖于C,而C不是码,故不服从4NF。但在函数依赖式中,C依赖于码AB,故该模式服从BCNF。 11.答:
1)候选码为AC,BC,AD,BD。可选其中之一为主码。 2)不服从4NF。在多值依赖中,决定因素中不包含码。 3)不服从BCNF。在函数依赖中决定因素中不包含码。 4)服从3NF。该模式中不存在非主属性。 12答:
1) 正确。2) 正确。3) 正确。4) 正确。5) 正确。6) 正确。7) 正确。8) 不正确。 例如:(学号,课程号)→成绩,则不存在:学号→成绩,课程号→成绩。 13.答:
1)把查询转换成语法树表示。
2)把语法树转换成标准(优化)形式。 3)选择低层的存取路径。
4)生成查询计划,选择代价最小的查询计划。 14.答:
1)选择运算尽可能先做。
2)在执行连接前对关系适当地预处理,即在连接属性上建立索引和对关系进行排序。 3)把投影运算和选择运算同时进行。
4)把投影同其前或其后的双目运算结合起来。
5)把某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算。 6)找出公共子表达式。
15.答:D 16.答:B 17.答:D 18.答:B 19.答:B
复习题八
1 什么是数据库的安全性?
2 数据库安全性和计算机的安全性有什么关系? 3 试述实现数据库安全性控制的常用方法和技术。
4 SQL语言中提供可哪些数据控制(自主存取控制)的语句?请试举例说明它们的使用方法。 5 今有两个关系模式:
职工(职工号,姓名,年龄,职务,工资,部门号); 部门(部门号,名称,经理名,地址,电话)。
请用SQL的GRANT和REVOKE语句(加上视图机制),完成以下授权定义或存取控制功能。 1)用户王明对两个表有SELECT权力。
2)用户李勇对两个表有INSERT和DELETE 权力。
3)用户刘星对职工表有SELECT权力,对工资字段具有更新权力。 4)用户张新具有修改两个表的结构的权力。
5)用户王明对两个表有的所有权力(读、写插、改、删除数据),并具有给其他用户授权的权力。
6)用户扬兰具有从每个部门职工中SELECT最高工资,最低工资,平均工资的权利,他不能查看每个人的工资。
6 .把习题8.5中1)-6)的每个用户所授予的权利予以撤消。 7. 什么是数据库的完整性?
8 .数据库的完整性概念与数据库的安全性概念有什么区别和联系? 9 .什么是数据库的完整性约束条件?的分为哪几类? 10. DBMS的完整性控制应具有哪些功能?
11. RDBMS在实现参照完整性时需要考虑哪些方面? 12. 假设有下面两个关系模式:
职工(职工号,姓名,年龄,职务,工资,部门号),其中职工号为主码; 部门(部门号,名称,经理名,地址,电话),其中部门号为主码;
用SQL语言定义这两个关系模式,要求在模式中完成以下完整性约束条件的定义: 1)定义每个模式的主码。 2)定义参照完整性
3)定义职工年龄不得超过60岁。 13.在数据库中为什么要并发控制?
14 并发操作可能和产生哪几类数据不一致?用什么方法能避免这些不一致的情况? 15 什么是封锁?
16 基本的封锁类型有几种?试述它们的含义。 17 如何用封锁机制保证数据的一致性?
18 什么是封锁协议?不同级别的封锁协议的主要区别是什么? 19 不同封锁协议与系统一致性级别得到关系是什么? 20 什么是活锁?什么是死锁?
21 试述活锁的产生原因和解决方法。 22 请给出预防死锁的若干方法。
23 请给出检测死锁发生的一种方法,当发生死锁后如个解除死锁? 24 什么样的旧宾恢复调度是正确的调度? 25 试述两段锁协议的概念
26 为什么要引进意向锁?意向锁的含义是什么?
27 理解并解释下列术语含义:封锁、活锁、死锁、排它锁、共享锁、并发锁、并发事务的调度、可串行化的调度、两段锁协议
复习题八答案
1. 答:
数据库的安全性是指保护数据库,以防止不合法的使用数据泄密、更改或破坏。 2.答:
数据库安全性是计算机系统的安全性的一个部分,数据库系统不仅要利用计算机系统的安全性保证自己系统的安全性,同时还会提供专门的手段和方法,使安全性能更好。例如,在用户要求进入计算机系统时,系统首先根据用户输入的用户标识进行身份鉴定,只有合法的用户才准许进入计算机系统;对已进入的用户,DBMS还要进行存取控制,只允许用户执行合法操作;操作系统也会提供相应的保护措施;数据最后还可以可以以密码形式存储到数据库中。 3.答:
① 用户标识与鉴别;②存取控制;③自主存取控制方法;④强制存取控制方法; ⑤视图机制;⑥审计;⑦数据加密 4.答:
① GRANT(授权)语句
例:GRANT SELECT,INSERT ON 学生TO 张勇WITH GRANT OPTION;
② REVOKE(收回) 语句
例:REVOKE INSERT ON 学生 FORM张勇; 5.答:
1)GRANT SELECT ON 职工,部门TO 王明 WITH GRANT OPTION;
2) GRANT INSERT,DELETE ON 职工,部门 TO 张勇 WITH GRANT OPTION; 3)GRANT SELECT,UPDATE(工资)ON 职工 TO 刘星 WITH GRANT OPTION; 4) GRANT ALTER TABLE TO 张新 WITH GRANT OPTION;
5)GRANT ALL PRIVILIGES ON 职工,部门TO 周平WITH GRANT OPTION; 6)CREATE VIEW 部门工资统计(最高工资,最低工资,平均工资)
AS SELECT MAX(工资),MIN(工资),AVG(工资) FROM职工GROUP BY 部门号; GRANT SELECT ON 部门工资统计TO 杨兰; 6.答:
1) REVOKE SELECT ON 职工,部门FROM 王明;
2) REVOKE INSERT,DELETE ON 职工,部门FROM 李勇; 3) REVOKE SELECT,UPDATE(工资) ON 职工FROM 刘星 4) REVOKE ALTER TABLEFROM 张新
5) REVOKE ALL PRIVILIGES ON 职工,部门FROM 周平 6) REVOKE SELECT ON 部门工资统计FROM 杨兰; 7.答:
数据库的完整性是指数据的正确性和相容性。 8.答:
数据库的完整性是指数据的正确性和相容性。数据库的安全性是指保护数据库,以防止不合法的使用造成的数据泄密、更改或破坏。其相同点是两者都是对数据库中的数据进行控制,各自所实现的功能目标不同。 9.答:
数据完整性约束是为了保证进入数据库中的数据的有效性而定义的数据规则。它可以分为以下两类:
① 针对不同的对象可以分为表级约束、元组级约束和属性级约束(也称列约束):表级约束是若
干元组间、关系之间的约束;元组级约束则是元组中的字段组和字段间联系的约束;属性级约束主要是针对列的类型、取值范围、精度、排序等而制定的约束条件。
② 针对数据对象的状态可以分为静态约束和动态约束:静态约束是指数据库每仪确定状态时的
数据对象所应满足的约束条件,他是反映数据库状态稳定时的约束;动态约束是指数据库从一种状态变为另一种状态时,新、旧值之间所满足的约束条件,它是反映数据库在状态变迁的约束。
10.答:
① 定义和存储完整性功能;②检查完整性功能;③控制完整性功能。 11.答:
① 外码能够接受空值的问题; ② 在被参照关系中删除元组时,采用级联删除、受限插入、或置空值删除的方法处理参照关系; ③ 在参照关系中插入元组时,可以使用受限插入、递归插入两种方法处理参照关系;
④ 参照关系的主码时,可以采用不允许修改主码、或允许修改关系主码。但必须保证主码的唯
一性和非空性方法处理参照关系;
⑤ 修改被参照关系时,可以采用级联修改、拒绝修改和置空值修改方法处理参照关系。 12.答:
CREATE TABLE职工(职工号 CHAR(5)PRIMARY KEY,
姓名 CHAR(8)NOT NULL, 年龄SMALLINT, 职务CHAR(10)
工资DECIMAL(7,2), 部门号CHAR(5),
CONSTRAINT C1 CHECK(年龄 <60)),
CONSTRAINT C2 FOREIGN KEY (部门号);)
CREATE TABLE 部门(部门号 CHAR(5)PRIMARY KEY,
名称 CHAR(16), 经理名 CHAR(8), 电话 CHAR(8),
CONSTRAINT C3 FOREINGN KEY (经理名) REFERENCES 职工(姓名));
13.答:
数据库的并发控制就是为了控制数据库,防止多用户并发使用数据库时造成数据错误和程序运行错误,保证数据的完整性。 14.答:
并发操作可能会产生丢失修改、不可重复读和读“脏”的数据不一致问题。用封锁的方法能避免这些不一致的情况。 15.答:
封锁是使事务对它要操作的数据有一定的控制能力。封锁具有三个环节:第一环节是申请加锁;第二个环节是获得锁;第三个环节是释放锁。 16.答:
基本的封锁类型有两种:排它锁和共享锁。
排它锁也称为独占或写锁。一旦事务T对数据对象A加上排它锁。则只允许T读取和修改A,其它任何事务既不能读取也不能修改A,也不能再对A加任何类型的锁,直到T释放A上的锁为止。
共享锁又称读锁。如果事务T对数据对象A加上共享锁,其它事务只能再加对A加S锁,不能加X锁,知道事务T释放A上的S锁为止。 17.答:
封锁机制作为并发控制的重要手段,利用封锁的特性和封锁协议,它再并发操作保证事务的隔离性,用正确的方式调度并发操作,是一个用户事务的执行不受其它事务的干扰,从而避免造成数据的不一致性。 18.答:
在对外数据对象加锁时,还需要约定一些规则,这些规则称为封锁协议。
一级封锁协议:是事务T在修改数据之前必须先对其加X锁,直到事务结束才释放,一级封锁协议可有效的防止丢失修改,并能够保证事务T的可恢复性。一级封锁协议由于没有对数据进行加锁,所以不能保证可重复读和不读“脏”数据。
二级封锁协议:是事务T对要修改的数据必须先加X锁,直到事务结束才释放X锁;要读取的数据必须先加S锁,读完后即可释放S锁。二级封锁协议不但能够防止丢失修改,还可进一步防止读“脏”数据。
三级封锁协议:是事务T在读取数据之前必须先对其加S锁,在要修改数据之前必须先对其加X锁,直到事务结束后才释放所有锁。由于三级封锁协议强调即使事务读完之后也不释放S锁,从而使的别的事务无法更改数据A。三级封锁协议不但防止了丢失修改和不读“脏‘数据,才读。 19.答:
一级封锁协议可有效地防止丢失修改,并能保证事务T的可恢复性。一级封锁由于没有对数据进行加锁,所以不能保证可重复读和不读 “脏‘数据。
二级封锁协议不但能够防止丢失修改,还可进一步防止读“脏”数据。
由于三级封锁协议强调即使事务读完数据A之后也不释放S锁,从而使的别的事务无法更改数据。三级封锁协议不但防止了丢失修改和不读“脏”数据,而且防止了不可重复读。
20.答:在多个事务请求对同一数据加锁时,总是使某一用户等待得情况称为活锁;多事务交错等待得僵持局面称为死锁。 21.答:
活锁是封锁的无序造成的。解决方法是采用先来先去服务的方法,即对要求封锁数据的事务排队,使前面的事务先获得数据的封锁权。 22.答:
预防死锁通常有以下两种方法:
①一次封锁法,就是要求每个事务必须一次将所有要使用的数据全部加锁,否则该事务不能
继续执行;
② 顺序封锁法,是预先对数据对象规定一个封锁顺序,搜有事务都按这个顺序实行封锁。
23.答:
检测死锁发生的一种方法是选择一个处理死锁代价最小的事务,将其撤销,释放此事务持有的所有锁,使其他事务得以继续运行下去。
解除死锁问题有两类方法:一类方法是采用一定措施来预防死锁的发生;另一类方法是允许发生死锁,然后采用一定手段定期诊断系统中有无死锁,若有则解除之。 24.答:
如果一个事务运行过程中没有其他事务同时运行,即没有受到其他事务的干扰,那么就可以认为该事务的运行结果是正常的,可串行性是并发事务正确性的准则,为了保证并发操作的正确性,DBMS的并发控制机制必须提供一定的手段来保证调度是可串行化的。 25.答:
所谓两段锁协议是指所有事务必须分两个阶段对数据项进行加锁和解锁;
(1) 在对任何数据进行读,写操作之前,首先要申请并获得对该数据的加锁; (2) 在释放一个封锁之后,事务不再申请并获得对该数据的封锁
即每个事务分成两个阶段,第一阶段是申请和获得封锁,也称为扩展阶段。在这阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能再申请任何锁。 26.答:
事务T要对关系R1加X锁时,系统只需检查根节点数据库和关系R1是否已加入了不相容的锁,而不再需要搜索和检查R1中的每一个元组是否加了X锁,对任一元组加锁,必须先对他所在的关系加意向锁。意向的含义是:如果对一个节点加意向锁,则说明该节点的下层节点正在被加锁;对任何一结加锁时,必须先对它的上层节点加意向锁。 27.答:
(1) 封锁:封锁是使事务对它要操作的数据有一定的控制能力。
(2) 活锁:这种在多个事务请求对同一数据封锁时,总是使某一用户等待的情况称为活锁。 (3) 死锁:这种多事务交错等待的僵持局面称为死锁。
(4) 排它锁:排它锁也称为独占或写锁。一旦事务T对数据对象A加上排它锁,则只允许T
读取和修改A。其他任何事务既不能读取和修改A,也不能再对A加任何类型的锁,直到T释放A上的锁为止。
(5) 共享锁:共享锁又称为读锁。如果事务T对数据对象A加上共享锁,其他事务只能再对A
加S锁,不能加X锁,知道事务T释放A上的S锁为止。
(6) 并发事务的调度:多个事务并发执行调度策略称为并发事务调度。 (7) 可串行化的调度:如果多个事务并发执行的结果与按串行执行的结果相同,这种调度策略
称为可串行化的调度。
两段锁协议:所谓两段锁协议是指所有事务必须分两个阶段对数据项进行加锁和解锁。