数据库系统原理课后答案 - 图文 下载本文

6.6 什么是“运行记录优先原则”?其作用是什么?

在数据库系统中,写一个修改到数据库中和写一个表示这个修改的登记记录到日志文件中是两个不同的操作, 在这两个操作之间有可能发生故障。这时,如果先写了数据库修改,而在运行记录中没有登记这个修改, 则以后就无法恢复这个修改,那么以后也就无法撤消这个修改。为了安全起见,采用“运行记录优先原则”。 它包括两点:

(1)至少要等相应运行记录已经写入“日志”文件后,才能允许事务往数据库中写记录。

(2)直至事务的所有运行记录都已写入运行“日志”文件后,才能允许事务完成“END TRANSACTION”处理。 采用“运行记录优先原则”,可以保证所做的操作都记录在日志中,便于故障处理,维护数据库的一致性。 6.7 什么是数据库的恢复?恢复的基本原则是什么,恢复如何实现?

数据库的恢复是指当数据库系统发生故障时,通过一些技术, 使数据库从被破坏、不正确的状态恢复到最近一个正确的状态。

恢复的基本原则就是冗余,即数据的重复存储。恢复的常用方法有:

(1)定期对整个数据库进行复制或转储; (2)建立日志文件; (3)恢复。用REDO或UNDO处理。 6.8 数据库的并发操作会带来哪些问题?如何解决? 数据库的并发操作会带来三类问题:

(1)丢失更新问题;(具体内容见教材P158) (2)不一致分析问题 (3)“脏数据”的读出。 解决的办法通常是采用“封锁”技术。 6.9 有哪些“丢失更新”问题?如何处理?

(1)并发调度引起的“丢失更新”问题。在并发调度中,如两个事务同时对某数据库进行更新操作, 在操作中丢失了其中某个事务对某数据的更新操作。处理的办法就是对并发操作采用X封锁技术。 (2)由恢复引起的更新丢失现象。采用X封锁以后,先执行事务T1,再执行事务T2,此时, 如果T2做ROLLBACK操作,就把事务T2的更新丢失了。 处理方式是采用PXC协议,不允许事务T1执行解锁操作直到事务执行到终点(COMMIT或ROLLBACK)。

6.10 为什么DML只提供解除S封锁的操作,而不提供解除X封锁的操作?

为了防止由恢复引起的更新丢失现象,PXC协议规定:X封锁必须保留到事务终点(COMMIT或ROLLBACK)。 因此在DML中,COMMIT或ROLLBACK的语义中包含了X封锁的解除,不用提供解除X封锁的操作。

而对于S封锁而言,它是一种共享型的封锁(读取但不能修改),其数据不可能是未提交的修改, 封锁不必等提交后才能解除,因此可以由事务用UNLOCK解除各自对数据的封锁。 6.11 为什么有些封锁需保留到事务终点,而有些封锁可随时解除?

因为有的封锁需要更新数据,保留到终点才能确认是否提交或回退以避免脏数据的读出, 所以这些封锁需要保留到事务终点。

而有些事务全部或部分操作只是读取数据,不涉及更新数据操作, 因此这一部分操作的封锁可以随时解除。 6.12 死锁的发生是坏事还是好事?试说明理由。如何解除死锁状态? 死锁的发生即是坏事又是好事。

(1)使并发事务不能继续执行下去,造成时间开销却不产生结果。

(2)在某些时候我们要利用它来解决更新操作导致的数据库不一致状态。

解除死锁状态:抽出某个事务作为牺牲品,把它撤消,做回退操作,解除它的所有封锁,并恢复到初始状态。 6.13 试叙述\串行调度\与\可串行化调度\的区别。

串行调度是多个事务按照一定的次序依次执行;在某一时刻只有一个事务在执行。

而可串行化调度是并发调度中的一个概念。在并发调度中,某一时刻有多个事务同时被处理。 如果某事务集的一个并发调度的结果与某个串行调度等价, 则称此并发调度是是可串行化调度。 (以上几题具体可参照书上p20-21)

6.14 什么是数据库的完整性? DBMS的完整性子系统的功能是什么?

数据库的完整性是指数据的正确性和相容性。DBMS完整性子系统的功能是:

(1)监督事务的执行,并测试是否违反完整性规则; 如有违反,则采取恰当的操作, 6.15 完整性规则由哪几个部分组成?关系数据库的完整性规则有哪几类? 完整性规则由三部分组成:

触发条件:即什么时候使用规则进行检查; 约束条件:即要检查什么样的错误; ELSE子句:即查出错误后该如何处理。 完整性规则有以下三类:

域完整性规则,用于定义属性的取值范围;

域联系的规则,定义一个或多个关系中,属性值间的联系、影响和约束。 关系完整性规则,定义更新操作对数据库中值的影响和限制。

6.16 试详述SQL中的完整性约束机制? SQL中的完整性约束规则有主键约束、外键约束、属性值约束和全局约束等多种形式。 △主键约束。它是数据中最重要的一种约束。在关系中主键值不允许空,也不允许出现重复, 体现了关系要满足实体完整性规则。主键可用主键子句或主键短语进行定义。 △外键约束。根据参照完整性规则,依赖关系中外键或者为空值, 或者是基本关系(参照关系)中的该键的某个值。外键用外键关系子句定义, 并考虑删除基本关系元组或修改基本关系的主键值的影响,依赖关系可按需要采用RESTRICT、SET NULL、CASCADE方式。 △属性值约束。当要求某个属性的值不允许空值时,那么可以在属性定义后加上关键字:NOT NULL , 这是非空值约束。还可以用CHECK子句对一个属性值加以限制以及使用域约束子句CREAT DOMAIN 定义新域并加以属性值检查。 △全局约束。在关系定义时,可以说明一些比较复杂的完整性约束,这些约束涉及到多个属性间的联系 或不同关系间的联系,称为全局约束。主要有基于元组的检查子句和断言。 前者是对单个关系的元组值加以约束,后者则可对多个关系或聚合操作有关的完整性约束进行定义。 6.17 参照完整性规则在SQL可以用哪几种方式实现?删除基本关系的元组时, 依赖关系可以采取的做法有哪三种?修改基本关系的主键值时,依赖关系可以采取的做法有哪三种? 参照完整性规则要求\不引用不存在的实体\,参照完整性规则在SQL可用以下几种方式实现: (1)在SQL中采用外键子句定义外键,并考虑删除基本关系元组或修改基本关系的主键值, 对依赖关系产生的影响; (2)在属性值上进行约束如基于属性的检查; (3)全局约束中的基于元组的检查子句等。 删除基本关系元组或修改基本关系的主键值时,依赖关系可以采用的做法有: △RESTRICT方式:只有当依赖关系中没有一个外键值与基本关系中要删除/修改的主键值相对应时, 系统才能执行删除/修改操作,否则拒绝删除或修改。 △SET NULL方式:删除基本元组时,将依赖关系中所有与基本关系中被删除主键值相对应的外键值置为空值。 修改基本关系的主键值时,将依赖关系中所有与基本关系中被修改主键值相对应的外键值置为空值。 △CASCADE方式:若删除则将依赖关系中所有外键值与基本关系中要删除的主键值相对应的元组一并删除, 若修改则将依赖关系中所有与基本关系中要修改的主键值相对应的外键值一并修改为新值。 6.18 试对SQL2中的基于属性的检查约束、基于元组的检查约束和断言 三种完整性约束进行比较:各说明什么对象?何时激活?能保证数据库的一致性吗? 约束形式 说明对象 激活条件 是否保证一致性 基于属性的检查 只对一个属性值加以约束 插入或修改属性值时 不一定 基于元组的检查 对单个关系的元组值加以约束 在插入或修改元组时 不一定 断言 多个关系或聚合操作 任何变动 保证 6.19 (1)定义S时采用检查子句: CREAT TABLE S( S# CHAR(4), SNAME char (10) NOT NULL , AGE SMALLINT , PRIMARY key(S#), CHECK (AGE>=16 and AGE<=25) ) (2)采用外键子句约束 CREAT TABLE SC( S# CHAR(4), C# CHAR(4), GRADE SMALLINT, FOREIGN key(S#) REFERENCE S(S#), FOREIGN key(C#) REFERENCE C(C#) ) (3)采用元组检查 CREAT TABLE SC( S# CHAR(4), C# CHAR(4), GRADE SMALLINT, FOREIGN key(S#) REFERENCE S(S#), FOREIGN key(C#) REFERENCE C(C#), CHECK (GRADE>=0 and AGE<=100) ) (4)采用外键约束

CREAT TABLE SC( S# CHAR(4), C# CHAR(4), GRADE SMALLINT,

FOREIGN key(S#) REFERENCE S(S#), FOREIGN key(C#) REFERENCE C(C#) )

若改为:在删除关系C中一个元组时,同时把关系SC中具有同样C#的元组全部删去,则为: ......

FOREIGN key(C#) REFERENCE C(C#) ON DELETE CASCADE ...... (5)采用外键约束

CREAT TABLE SC( S# CHAR(4), C# CHAR(4), GRADE SMALLINT,

FOREIGN key(S#) REFERENCE S(S#) ON UPDATE CASCADE , FOREIGN key(C#) REFERENCE C(C#) ) 6.20

(1) CREAT ASSERTION ASSE1 CHECK ( NOT EXISTS

( SELECT S FROM SC WHERE C# IN (SELECT C# FROM C

WHERE CNAME<>'MATHS') AND S# NOT IN

(SELECT S# FROM SC WHERE C# IN (SELECT C# FROM C

WHERE CNAME='MATHS'))); (2) CREAT ASSERTION ASSE2 CHECK ( ALL(SELECT COUNT (SC.C#) FROM S,SC

WHERE S.S#=SC.S AND SEX='M' GROUP BY S#)<=20);

6.21 什么是数据库的安全性?有哪些安全措施?

数据库的安全性是指保护数据库防止不合法的使用,以免数据的泄漏、非法更改和破坏。 可以从以下方面设置数据库的安全措施:环境级、职员级、OS级、网络级和数据库系统级。 (具体可参见教材P173)

6.22 对银行的数据库系统应采取哪些安全措施?分别属于哪一级? 答案基本同上一题。

6.23 什么是\权限\用户访问数据库可以有哪些权限?对数据库模式有哪些修改权限? 用户使用数据库的方式称为权限。

用户访问数库的权限有:读权限、插入权限、修改权限、删除权限。

用户修改数据库模式的权限有索引权限、资源权限、修改权限、撤销权限。 6.24 试解释权限的转授与回收。

在数据库系统中,为了保证数据的安全性,用户对数据的操作必须首先从DBA处获得权限,才能进行对数据的操作。 同时数据库系统也允许用户将获得的权限转授给其他用户,也允许把已授给其他用户的权限再回收上来。 但应保证转授出去的权限能收得回来。

6.25 SQL 语言中的视图机制有哪些优点?

视图机制使系统具有三个优点:数据安全性、数据独立性和操作简便性。 6.26 SQL2中用户权限有哪几类?并作必要的解释。 SQL2中定义了六类用户权限,分别是:

(1)SELECT :允许用户对关系或视图执行SELECT操作。

(2)INSERT :允许用户对关系或视图执行INSERT操作,如果还说明了一个属性表, 那么表示只能插入这些属性的值,关系中其他属性值将置为缺省值或为空值。 (3)DELETE:允许用户对关系或视图执行DELETE操作。

(4)UPDATE:允许用户对关系或视图执行UPDATE操作,如果还说明了一个属性表, 那么表示只能修改这些属性的值,否则表示可以修改关系中任一属性值。

(5)REFERENCES:允许用户定义新关系时,引用其他关系的主键作为外键。 (6)USAGE:允许用户使用定义的域。

6.27 数据加密法有些什么优点?如何实现?

数据加密可以更好地保证数据的完全性。加密采用一定的加密算法给把源文变为密文来实现。 常用的加密算法有\替换方法\和明键加密法。