数据库课后习题

文章目录

第一章

课后习题

一、试述数据、数据库、数据库管理系统、数据库系统的概念。

1、数据:描述事物的符号记录
2、数据库:是长期存储在计算机内、有组织、可共享的大量数据集合
3、数据库管理系统DBMS:是位于用户与操作系统之间的一层数据管理软件,用于建立、使用、维护数据库。
4、数据库系统DBS:由数据库、数据库管理系统、应用数据和数据库管理员组成的存储、管理、处理和维护数据的系统。

二、使用数据库有什么好处

使用数据库可以大大提高应用开发的效率,因为再数据库系统中应用程序不必考虑数据的定义,储备与数据存取的具体路径,这些都由DBMS来完成。此外,当应用规律转变,数据的规律结构需要转变时,由于数据库系统供应了数据数据与程序之间的独立性,这就是DBA的责任,开发人员不必修改应用程序,或者只需修改很少的应用程序,从而简化程序编制,削减应用程序的维护与修改。即使用数据库可以减轻DBA的维护系统负担。
总结:使用数据库便于数据的集中治理,掌握数据冗余、提高数据利用率与一致性,有利于应用程序的开发与维护。

三、试述文件系统和数据库系统的区分

文件系统:面对某一应用程序,共享性差、冗余度大、独立性差,记录内有结构,整体无结构,应用程序自己掌握
数据库系统:面对现实世界,共享性高,冗余度小,具有高度物理独立性和逻辑独立性,整体结构化,由数据模型描述。
联系:文件系统与数据库系统都是计算机系统中管理数据的软件。

四、举出适合用文件系统而不是数据库系统的例子;再举出适合用数据库系统的应用例子。

1、数据的备份、软件或应用程序使用过程中的临时数据存储一般使用文件比较合适。早期功能比较简单、比较固定的应用系统也适合用文件系统。
2、目前,几乎所有企业或部门的信息系统都以数据库系统为基础,都使用数据库。例如,一个工厂的管理信息系统会包括许多子系统,如库存管理系统、物资采购系统、作业调度系统、设备管理系统、人事管理系统等;再如学校的学生管理系统、人事管理系统、图书馆的图书管理系统等都适合用数据库系统。

五、试述数据库系统的特点

1、数据结构化:与文件系统的主要区分
2、数据的共享性高,冗余度低,易扩充:数据库的数据面对整个系统,因此可以被多个用户、应用、用多种不同语言使用
3、数据独立性高:物理独立性和逻辑独立性,由数据库管理系统的模式结构与二级映像功能保证。
4、数据由DBMS统一管理与控制:数据库的共享是并发的共享,即多个用户可以同时存取数据库中的数据甚至可以同时存取数据库中同一个数据。为此, DBMS 必须提供统一的数据控制功能,包括数据的安全性保护、数据的完整性检查、并发控制和数据库恢复。
  DBMS 数据控制功能包括四个方面:
  数据的安全性保护:保护数据以防止不合法的使用造成的数据的泄密和破坏;
  数据的完整性检查:将数据控制在有效的范围内,或保证数据之间满足一定的关系;
  并发控制:对多用户的并发操作加以控制和协调,保证并发操作的正确性;
  数据库恢复:当计算机系统发生硬件故障、软件故障,或者由于操作员的失误以及故意的破坏影响数据库中数据的正确性,甚至造成数据库部分或全部数据的丢失时,能将数据库从错误状态恢复到某一已知的正确状态,亦称为完整状态或一致状态。
  数据库系统的出现使信息系统从以加工数据的程序为中心转向围绕共享的数据库为中心的新阶段。

六、数据库管理系统的主要功能

1、数据库定义功能
2、数据组织、存储和管理功能
3、数据库操纵
4、数据库的建立与维护功能
5、数据库的事务管理和运行管理

七、什么是概念模型,概念模型的作用

概念模型:实际上就是现实世界到机器世界的一个中间层次
应用于信息世界的建模,就是现实世界到信息世界的第一层抽象,就是数据库设计人员进行数据库设计的有力工具,也是数据库设计人员于用户之间进行沟通的语言

八、定义并说明概念模型中的以下术语:实体、实体型、实体集、属性、码、实体练习图

实体:客观存在并可以相互区分的事物
实体型:具有相同属性的实体具有相同的特征和性质,用实体名及其属性名集合来抽象和刻画同类实体,称为实体型。  
实体集:同型实体的集合
属性:实体所具有的某一特性,一个实体可由多个属性来刻画
码:唯独标识实体的属性集
实体联系图:通常是指不同实体型的实体集之间的联系,实体之间的联系有一对一、一对多和多对多等多种类型。

九、试述数据模型的概念、数据模型的作用、数据模型三个要素

数据模型:数据库中用来对现实世界进行抽象的工具,时用于供应信息表是与操作手段的形式架构。一般地讲,数据模型就是严格定义的概念集合,这些概念精确的描述系统的静态特性,动态性与完整性约束条件,因此数据模型常由数据结构,数据操作与完整性约束三部分组成。
数据结构:对象类型的集合,对系统静态特性的描述
数据操作:对数据库中各种对象的实例进行的操作的集合,对系统的动态特性的描述
数据的约束条件:是一组完整性规则的集合。完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效、相容。
根据模型应用的不同目的,可以将模型分成两类或者说两个层次:一是概念模型,二是数据模型

十、试述层次模型的概念,举出三个层次模型的实例

层次模型满足:有且只有一个结点没有双亲结点,这个结点称为根结点;根以外的其他结点有且只有一个双亲结点。
实例:学校层次数据库模型;行政机构层次数据库模型;行政区域层次数据库模型。

十一、试述网状模型的概念,举出三个网状模型的实例。

满足下面两个条件的基本层次联系的集合为网状模型。
(1)允许一个以上的结点无双亲;
(2)一个结点可以有多于一个的双亲。

十二、试述网状、层次数据库的优缺点

层次模型的优点主要有:
(1)层次数据库的数据结构比较简单清晰;
(2)层次数据库的查询效率高;
(3)层次数据模型提供了良好的完整性支持。
层次模型的缺点主要有:
(1)现实世界中很多联系是非层次性的,层次数据库不能自然地表示这类联系;
(2)对插入和删除操作的限制比较多;
(3)查询子女结点必须通过双亲结点。
网状数据模型的优点主要有:
(1)能够更为直接地描述现实世界,如一个结点可以有多个双亲;
(2)具有良好的性能,存取效率较高。
   网状数据模型的缺点主要有:
(1)结构比较复杂,而且随着应用环境的扩大,数据库的结构就变得越来越复杂,不利于最终用户掌握;
(2)其 DDL 、 DML 语言复杂,用户不容易使用。由于记录之间联系是通过存取路径实现的,应用程序在访问数据时必须选择适当的存取路径。因此,用户必须了解系统结构的细节,加重了编写应用程序的负担。

十三、试述关系模型的概念,定义并解释以下术语:关系,属性,域,元组,码,分量,关系模式

关系模式:由关系数据结构、关系操作集合、关系完整性约束三部分组成。在用户观点下,关系模型中数据的逻辑结构是一张二维表,它由行和列组成。
关系:一个关系对应通常说的一张表;
属性:表中的一列即为一个属性;
域:属性的取值范围;
元组:表中的一行即为一个元组;
主码:表中的某个属性组,它可以惟一确定一个元组;
分量:元组中的一个属性值;
关系模式:对关系的描述,一般表示为:关系名(属性 1 ,属性 2 , … ,属性 n )

十四、试述关系数据库的特点。

1、关系模型与非关系模型不同,它是建立在严格的数学概念的基础上的。
2、关系模型的概念单一,无论实体还是实体之间的联系都用关系表示,操作的对象和操作的结果都是关系,所以其数据结构简单、清晰,用户易懂易用。
3、关系模型的存取路径对用户透明,从而具有更高的数据独立性、更好的安全保密性,也简化了程序员的工作和数据库开发建立的工作。
其中最主要的缺点是,由于存取路径对用户透明,查询效率往往不如非关系数据模型。因此为了提高性能,必须对用户的查询请求进行优化,增加了开发数据库管理系统的难度。

十五、试述数据库系统三级模式结构,这种结构的优点是什么?

数据库系统的三级模式结构由外模式、模式和内模式组成。
外模式,亦称子模式或用户模式,是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
  模式,亦称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。模式描述的是数据的全局逻辑结构。外模式涉及的是数据的局部逻辑结构,通常是模式的子集。
  内模式,亦称存储模式,是数据在数据库系统内部的表示,即对数据的物理结构和存储方式的描述。
  数据库系统的三级模式是对数据的三个抽象级别,它把数据的具体组织留给 DBMS管理,使用户能逻辑抽象地处理数据,而不必关心数据在计算机中的表示和存储。
  为了能够在内部实现这三个抽象层次的联系和转换,数据库系统在这三级模式之间提供了两层映像:外模式/模式映像和模式/内模式映像。正是这两层映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。

十六、定义并解释以下术语:

模式、外模式、内模式、 DDL 、 DML
(转第十五题)
   DDL :数据定义语言,用来定义数据库模式、外模式、内模式的语言。
   DML :数据操纵语言,用来对数据库中的数据进行查询、插入、删除和修改的语句。

十七、什么叫数据与程序的物理独立性?什么叫数据与程序的逻辑独立性?为什么数据库系统具有数据与程序的独立性?

数据与程序的逻辑独立性:当模式改变时(例如增加新的关系、新的属性、改变属性的数据类型等),由数据库管理员对各个外模式/模式的映像做相应改变,可以使外模式保持不变。应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性。
   数据与程序的物理独立性:当数据库的存储结构改变了,由数据库管理员对模式/内模式映像做相应改变,可以使模式保持不变,从而应用程序也不必改变,保证了数据与程序的物理独立性,简称数据的物理独立性。
   数据库管理系统在三级模式之间提供的两层映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。

十八、试述数据库系统的组成。

数据库系统一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员和用户构成。

十九、数据库管理员、系统分析员、数据库设计人员、应用程序员的职责是什么?

1、 数据库管理员的职责:
决定数据库中的信息内容和结构;
决定数据库的存储结构和存取策略;
定义数据的安全性要求和完整性约束条件;
监控数据库的使用和运行;
数据库的改进和重组、重构。
2、 系统分析员负责应用系统的需求分析和规范说明,系统分析员要和用户及 DBA 相结合,确定系统的硬件、软件配置,并参与数据库系统的概要设计。
3、 数据库设计人员负责数据库中数据的确定、数据库各级模式的设计。数据库设计人员必须参加用户需求调查和系统分析,然后进行数据库设计。在很多情况下,数据库设计人员就由数据库管理员担任。
4、 应用程序员负责设计和编写应用系统的程序模块,并进行调试和安装。

补充

  1. 数据冗余**–>数据不一致–>丢失数据、不课重复度、读脏数据(数据库系统减少数据冗余)
  2. 数据库系统特点**:数据共享、减少数据冗余、数据独立性、统一管理和控制
  3. 数据操作功能DML**:增删改查
  4. 数据控制功能DCL**:grant、revoke
  5. 数据定义功能DDL**:create、drop、alter
  6. 封锁协议:1级–加X锁,直至事务结束
    2级–加S锁,读完后即可释放
    3级–1级基础上加S,直至事务结束

第二章–关系数据库

一、试述关系模型的三个组成部分。

关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。

二、试述关系数据语言的特点和分类。

关系数据语言可以分为三类:关系代数语言、关系演算语言以及具有关系代数和关系演算双重特点的语言。
特点:具有完备的表达才能,就是非过程化的集合操作语言,功能强,能够嵌入高级语言中使用

三、定义并理解下列术语,说明它们之间的联系与区别:

(1)域,笛卡儿积,关系,元组,属性
域:域是一组具有相同数据类型的值的集合。
笛卡儿积:给定一组域D1,D2,…,Dn,允许其中某些,域是有相同的。这组域的笛卡儿积为
      D1xD2x…xDn={(d,d2,…,dn,)Idi属于Di,i=1,2,…,n}
关系:在域D1,D2,…,Dn上笛卡儿积D1xD2x…xDn的子集称为关系,表示为
      R(D1,D2,…,Dn)。
注意,这里是用较为形式化的方法来定义关系。在第1章中则是用通俗的语言来说明什么是关系,是一种不严格的定义。
元组:关系中的每个元素是关系中的元组。
属性:关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。 由于域可以相同,为了加以区分,必须对每列起一个名字,称为属性( attribute)。

(2)候选码,主码,外码
候选码:若关系中的某一属性组的值能唯地标识一个元组,而其子集不能,则称该属性组为候选码( candidate key)。
主码:若一个关系有多个候选码,则选定其中一个为主码(primary key)。
外码:设F是基本关系R的一个或一组属性, 但不是关系R的码,如果F与基本关系R的主码K相对应,则称F是基本关系R的外部码( foreign key),简称外码。

(3)关系模式,关系,关系数据库
关系模式:关系的描述称为关系模式( relation schema)。它可以形式化地表示为
      R(U,D,DOM,F)
其中R为关系名,U为组成该关系的属性名集合,D为属性组U中属性所来自的域,DOM为属性向域的映像集合,F为属性间数据的依赖关系集合。
关系:见(1),关系是关系模式在某一时刻的状态或内容。关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的,因为关系操作在不断地更新着数据库中的数据。
关系数据库:关系数据库也有型和值之分。关系数据库的型称为关系数据库模式,是对关系数据库的描述,它包括若干域的定义以及在这些域上定义的若干关系模式。关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常就称为关系数据库。

四、举例说明关系模式和关系的区别。

关系模式是型;关系是值,是关系模式的实例。例如:
Student( Sno,Sname ,Sage) 是关系模式,下面的表是关系,即某一时刻关系模式的值。
Sno Sname Sage
S1 张俊丽 18
S1 李红钰 19
S1 王敏英 19

五、试述关系模型的完整性规则。在参照完整性中,什么情况下外码属性的值可以为空值?

关系模型中可以有三类完整性约束:实体完整性、参照完整性和用户定义的完整性。关系模型的完整性规则是对关系的某种约束条件。
   实体完整性规则:若属性A是基本关系R的主属性,则属性A不能取空值。
   参照完整性规则:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为: 或者取空值(F的每个属性值均为空值);
   或者等于S中某个元组的主码值。
   用户定义的完整性是针对某一具体关系数据库的约束条件。它反映某一具体应用所设计的数据必须满足的语义要求。
   在参照完整性中,如果外码属性不是其所在关系的主属性,则可以取空值,否则不能取空值。

六、设有一个SPJ数据库,包括S,P,J,SPJ四个关系模式:请添加图片描述

请添加图片描述
请添加图片描述

七、 试述等值连接与自然连接的区别和联系。

连接运算符是“=”的连接运算称为等值连接。它是从关系R与S的广义笛卡尔积中选取A,B属性值相等的那些元组;
   自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。(再等值连接的基础之上去除)

八、关系代数的基本运算有哪些 ? 如何用这些基本运算来表示其他运算?

并、差、笛卡尔积、投影和选择5种运算为基本运算。其他3种运算,即交、连接和除,均可以用这5种基本运算来表达。

补充

  1. 自然连接:是一种特殊的等值连接,其比较分量必须是同名属性
  2. 等值连接:是从两个关系的广义笛卡尔积中选取属性值相等的那些元组级,即等值连接之后要去除相同属性
  3. 关系模式的任何属性不可再分
  4. 关系数据库中基于数学上的两类运算–关系代数、关系演算

九、设有如下所示的关系S(S#,SNAME,AGE,SEX)、C(C#,CNAME,TEACHER)和SC(S#,C#,GRADE),用关系代数表达式表示下列查询语句:

(1) 检索“程军”老师所授课程的课程号(C#)和课程名(CNAME)。

(2) 检索年龄大于21的男学生学号(S#)和姓名(SNAME)。

(3) 检索至少选修“程军”老师所授全部课程的学生姓名(SNAME)。

(4) 检索”李强”同学不学课程的课程号(C#)。

(5) 检索至少选修两门课程的学生学号(S#)。

(6) 检索全部学生都选修的课程的课程号(C#)和课程名(CNAME)。

(7) 检索选修课程包含“程军”老师所授课程之一的学生学号(S#)。

(8) 检索选修课程号为k1和k5的学生学号(S#)。

(9) 检索选修全部课程的学生姓名(SNAME)。

(10) 检索选修课程包含学号为2的学生所修课程的学生学号(S#)。

(11) 检索选修课程名为“C语言”的学生学号(S#)和姓名(SNAME)。
在这里插入图片描述

第三章–关系数据库标准语言SQL

一、试述 SQL 语言的特点。

1)综合统一。 SQL 语言集数据定义语言 DDL 、数据操纵语言 DML 和数据控制语言 DCL 的功能于一体。
(2)高度非过程化。用 SQL 语言进行数据操作,只要提出“做什么”,而无需指明“怎么做”,因此无需了解存取路径,存取路径的选择以及 sQL 语句的操作过程由系统自动完成。
(3)面向集合的操作方式。SQL 语言采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。
(4)以同一种语法结构提供两种使用方式。SQL 语言既是自含式语言,又是嵌入式语言。作为自含式语言,它能够独立地用于联机交互的使用方式;作为嵌入式语言,它能够嵌入到高级语言程序中,供程序员设计程序时使用。
(5)语言简捷,易学易用。

二、说明在DROP TABLE时RESTRICT和CASCADE的区别。

RESTRICT表示表的删除是有限制条件的。要删除的基本表不能被其他表的约束所引州,不能有视图,不能有触发器,不能有存储过程或函数等。如果存在这些依赖该表的对象,则表不能被删除。
   CASCADE表示表的删除没有限制条件,在删除基本表的同时,相关的依赖对象(如视图)都将被删除。

三、有两个关系S(A,B,C,D)和T(C,D,E,F),写出与下列查询等价的SQL表达式:

请添加图片描述

四、用 SQL 语句建立第二章习题6中的 4 个表;针对建立的 4 个表用 SQL 语言完成第二章习题6中的查询。

建表:
create table S(SNO char(10) unique,
SNAME char(10),
STATUS char(10) ,
CITY char(10));
create table P(Pno char(2) unique,
Pname char(6),
COLOR char(2),
WEIGHT int);
create table J(Jno char(2) unique,
JNAME char(8),
CITY char(4));
create table SPJ(Sno char(2),
Pno char(2),
Jno char(2),
QTY int);
插入数据:
insert into S
values(‘S1’,‘精益’,20,‘天津’);
insert into S
values(‘S2’,‘盛锡’,10,‘北京’);
insert into S
values(‘S3’,‘东方红’,30,‘北京’);
insert into S
values(‘S4’,‘丰泰盛’,20,‘天津’);
insert into S
values(‘S5’,‘为民’,30,‘上海’);
···
查询:

   (1)select distinct sno from SPJ where jno='j1' ;
    (2)select distinct sno form SPJ where jno='j1' and pno='p1';
    (3)select distict sno from SPJ,P where jno='j1' and SPJ.pno=P.pnoand P.color='红' (涉及两个表,先连接后查询)
	(4) select jno from SPJ 
     	where jno not in(select  jno form spj,P,S
	               where S.city='天津'and P.color='红' and  SPJ.pno=P.pno and SPJ.sno=S.sno);
	(5)select Jno from SPJ A
       	where A.Sno='S1' and not exists(
							select Pno from SPJ B
							where B.Sno='S1' and not exists(
							select Jno from SPJ C
							where C.Pno=B.Pno and  C.Jno=a.Jno
							))

五、针对上题中的四个表试用SQL语言完成以下各项操作:

(1)找出所有供应商的姓名和所在城市。

	select  sname,city from S

(2)找出所有零件的名称、颜色、重量。

	select pname,color,weight from P

(3)找出使用供应商S1所供应零件的工程号码。

	select distinct jno from SPJ where sno='s1'

(4)找出工程项目J2使用的各种零件的名称及其数量。

select  pname,qty from p,spj where jno='j2' and spj.pno=P.pno 

(5)找出上海厂商供应的所有零件号码。

select pno from SPJ,s where s.city='上海‘ and spj.pno=p.pno 

(6)出使用上海产的零件的工程名称。

select jname from J,SPJ,S where s.city='上海' s.sno=spj.sno and j.jno=spj.jno

(7)找出没有使用天津产的零件的工程号码。

select jno from SPJ where pno not in (
						select pno from spj,s 
						where s.city='天津' and 		                             	      
						s.sno=spj.sno  )

(8)把全部红色零件的颜色改成蓝色。

update  p set color='蓝色' where color='红色'

(9)由S5供给J4的零件P6改为由S3供应。

update spj set sno='s3' where sno='s5' and jnp='j4' and pno='p6'

(10)从供应商关系中删除供应商号是S2的记录,并从供应情况关系中删除相应的记录。

delete from S where sno='s2'   cascade
DELETE FROM SPJ WHERE SNO=‘S2’ cascade

(11)请将(S2,J6,P4,200)插入供应情况关系。

	insert into spj values('S2','J6','P4','200')

六、什么是基本表?什么是视图?两者的区别和联系是什么?

基本表是本身独立存在的表,在 SQL 中一个关系就对应一个表。
   视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表。即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。视图在概念上与基本表等同,用户可以如同基本表那样使用视图,可以在视图上再定义视图。

七、试述视图的优点。

(1)视图能够简化用户的操作;
(2)视图使用户能以多种角度看待同一数据;
(3)视图对重构数据库提供了一定程度的逻辑独立性;
(4)视图能够对机密数据提供安全保护。

八、哪类视图是可以更新的?哪类视图是不可更新的?各举一例说明。

基本表的行列子集视图一般是可更新的。
若视图的属性来自集合函数、表达式,则该视图肯定是不可以更新的。

  • 所有的视图是否都可以更新?为什么?
    不是。视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更新。因为有些视图的更新不能惟一有意义地转换成对相应基本表的更新,所以,并不是所有的视图都是可更新的。

九、请为三建工程项目建立一个供应情况的视图,包括供应商代码(SNO)、零件代码(PNO)、供应数量(QTY)。

create view gongying( nsno,npno,nqty)
as 
select sno,pno,qty
from spj,j 
where spj.jno=j.jno and j.jname='三建'

(1)找出三建工程项目使用的各种零件代码及其数量

select pno,qty from gongying

(2)找出供应商S1的供应情况

select * from gongying where sno='s1'

第四章–数据库的安全性

一、什么是数据库的安全性?

数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。

二、数据库安全性和计算机系统的安全性有什么关系?

安全性问题不是数据库系统所独有的,所有计算机系统都有这个问题。只是在数据库系统中大量数据集中存放,而且为许多最终用户直接共享,从而使安全性问题更为突出。
   系统安全保护措施是否有效是数据库系统的主要指标之一。
   数据库的安全性和计算机系统的安全性,包括操作系统、网络系统的安全性是紧密联系、相互支持的。

四、试述实现数据库安全性控制的常用方法和技术。

实现数据库安全性控制的常用方法和技术有:
(1)用户标识和鉴别:该方法由系统提供一定的方式让用户标识自己的名字或身份。每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供系统的使用权。
(2)存取控制:通过用户权限定义和合法权检查确保只有合法权限的用户访问数据库,所有未被授权的人员无法存取数据。例如CZ 级中的自主存取控制( DAC ) , Bl 级中的强制存取控制(MAC )。
(3)视图机制:为不同的用户定义视图,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。
(4)审计:建立审计日志,把用户对数据库的所有操作自动记录下来放入审计日志中,DBA 可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。
(5)数据加密:对存储和传输的数据进行加密处理,从而使得不知道解密算法的人无法获知数据的内容。

五、什么是数据库中的自主存取控制方法和强制存取控制方法?

自主存取控制方法:定义各个用户对不同数据对象的存取权限。当用户对数据库访问时首先检查用户的存取权限。防止不合法用户对数据库的存取。
   强制存取控制方法:每一个数据对象被(强制地)标以一定的密级,每一个用户也被(强制地)授予某一个级别的许可证。系统规定只有具有某一许可证级别的用户才能存取某一个密级的数据对象。

六、对下列两个关系模式:

学生(学号,姓名,年龄,性别,家庭住址,班级号)
班级(班级号,班级名,班主任,班长)
使用语句完成下列授权功能:
⑴授予用户U1对两个表的所有权限,井可给其他用户授权。

	grant all privileges on 学生,班级 to U1 with grant option

(2)授了用户U2对学生表具有查看权限,对家庭住址具有更新权限。

	grant   select update(家庭住址) on 学生 to U2 

(3)将对班级表查看权限授予所有用户。

	grant select on 班级 to public 

(4)将对学生表的查询、更新权限授予角色R1。

	grant select,update on 学生 to R1

(5)将角色R1授予用户U1.并且Ul可继续授权给其他角色。

	grant  r1 to u1  with   admin option 

七、今有两个关系模式:

职工(职工号,姓名,年龄,职务,工资,部门号)
部门(部门号,名称,经理名,地址,电话号)
请用SQL的GRANT和REVOKE语句(加上视图机制)完成以下授权定义或存取控制功能:
(1)用户王明对两个表有SELECT权力;

	grant select on 职工,部门 to 王明

(2)用户李勇对两个表有INSERT和DELETE权力;

	grant insert,delete on  职工,部门 to 李勇

(3)每个职工只对自己的记录有SELECT权力
需要先创建视图,创建时用user()函数获取当前登录的用户名,然后从表中查找该用户名,把查到的用户信息放入视图中

	create view 职工视图  as select * from 职工 where  concat(姓名,'@localhost')=user()

concat() 是字符串连接函数,user()函数获取当前用户,返回值是用户名和地址
使用 select user(); 命令可以查看当前用户,获取到的格式为 ‘用户名’@‘localhost’,所以用 concat() 函数对职工表中存储的姓名进行处理

	grant select on 职工视图  to public

(4)用户刘星对职工表有SELECT权力,对工资字段具有更新权力;

	grant select,update(工资) on 职工 to 刘星

(5)用户张新具有修改这两个表的结构的权力;

	grant alter table on 职工,部门 to 张新

(6)用户周平具有对两个表所有权力(读,插,改,删数据),并具有给其他用户授权的权力;

	grant all privileges on职工,部门 to周平  with grant option

(7)用户杨兰具有从每个部门职工中SELECT最高工资,最低工资,平均工资的权力,他不能查看每个人的工资。

create view gongzi	
as
select 部门.名称 max(工资),min(工资),avg(工资) from  职工,部门  where 职工.部门号=部门.部门号 group by  职工.部门号
grant select on gongzi to杨兰;

八、把习题7中(1)~(7)中的每一种情况,撤销各户所授予的权力。

 1. revoke select on职工,部门 from 王明;
 2. revoke insert,delete on职工,部门 from 李勇;
 3. revoke select on 职工where user()=name from public;
 4. revoke select,update 职工 from 刘星;
 5. revoke alter table on 职工,部门from张新;
 6. revoke all privilegs on 职工,部门from 周平;
 7.revoke select on gongzi from 杨兰;
   drop view gongzi;
(视图不用时要删除)

九、理解并解释MAC 机制中主体、客体、敏感度标记的含义。

  • 主体是系统中的活动实体,既包括DBMS 所管理的实际用户,也包括代表用户的各进程。
  • 客体是系统中的被动实体,是受主体操纵的,包括文件、基表、索引、视图等。
  • 对于主体和客体,DBMS 为它们每个实例(值)指派一个敏感度标记(Label )。敏感度标记被分成若干级别,例如绝密(Top Secret )、机密(Secret )、可信( Confidential )、公开(Public)等。主体的敏感度标记称为许可证级别,客体的敏感度标记称为密级。

十一、什么是数据库的审计功能,为什么要提供审计功能?

  • 审计功能:是指DBMS 的审计模块在用户对数据库执行操作的同时把所有操作自动记录到系统的审计日志中。
    因为任何系统的安全保护措施都不是完美无缺的,蓄意盗窃破坏数据的人总可能存在。利用数据库的审计功能,DBA 可以根据审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。

补充

  1. 数据系统提供的数据控制功能:数据的安全性控制、数据完整性控制、并发控制、数据恢复
  2. 保护数据安全的一般方法:设置用户标识和存取控制
  3. 安全性控制的一般方法:用户标识鉴定、存取控制、审计、数据加密和视图的保护五级安全措施

第五章:数据库完整性

一、 什么是数据库的完整性?

数据库的完整性是指数据的正确性和相容性。

二、数据库的完整性概念与数据库的安全性概念有什么区别和联系?

数据的完整性和安全性是两个不同的概念,但是有一定的联系。
前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出( Garbage In Garbage out )所造成的无效操作和错误结果。
后者是保护数据库防止恶意的破坏和非法的存取。也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不合语义的数据。

三、什么是数据库的完整性约束条件?

完整性约束条件是指数据库中的数据应该满足的语义约束条件。

四、DBMS 的完整性控制机制应具有哪三个方面的功能?

DBMS 的完整性控制机制应具有三个方面的功能:
(1)定义功能,即提供定义完整性约束条件的机制;
(2)检查功能,即检查用户发出的操作请求是否违背了完整性约束条件;
(3)违约处理功能:如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。

五、RDBMS 在实现参照完整性时需要考虑哪些方面?

RDBMs 在实现参照完整性时需要考虑以下几个方面:
( l )外码是否可以接受空值。
( 2 )册 l 除被参照关系的元组时的考虑,这时系统可能采取的作法有三种: l )级联删除( CASCADES ) ; 2 )受限删除( RESTRICTED ) ; 3 )置空值删除( NULLIFIES )。
( 3 )在参照关系中插入元组时的问题,这时系统可能采取的作法有: l )受限插入; 2 )递归插入。
( 4 )修改关系中主码的问题。一般是不能用 UPDATE 语句修改关系主码的。如果需要修改主码值,只能先删除该元组,然后再把具有新主码值的元组插入到关系中。如果允许修改主码,首先要保证主码的惟一性和非空,否则拒绝修改。然后要区分是参照关系还是被参照关系。

六、假设有下面两个关系模式:

职工(职工号,姓名,年龄,职务,工资,部门号),其中职工号为主码;
部门(部门号,名称,经理名,电话),其中部门号为主码。
用 SQL 语言定义这两个关系模式,要求在模式中完成以下完整性约束条件的定义:定义每个模式的主码;定义参照完整性;定义职工年龄不得超过 60 岁。

	create table 职工(
	职工号 cahr(10) ,
	姓名 cahr(10),
	年龄 int ,
	职务 cahr(10),
	工资 cahr(10),
	部门号 int ,
	primarkey key(职工号),
	foreign key(部门号 ) reference 部门(部门号)
	constraint c1 check(年龄<=60 )
	);

	create table 部门(
	部门号 cahr(10),
	名称 char(10),
	经理名 char(10),
	电话 char(15),
	primary key(部门号),
	 );

七、关系系统中,当操作违反实体完整性、参照完整性和用户定义的完整性约束条件时,一般是如何分别进行处理的?

对于违反实体完整性和用户定义的完整性的操作一般都采用拒绝执行的方式进行处理。而对于违反参照完整性的操作,并不都是简单地拒绝执行,有时要根据应用语义执行一些附加的操作,以保证数据库的正确性。

八、某单位想举行一个小型的联谊会,关系Male记录注册的男宾信息,关系Female记录注册的女宾信息。

建立一个断言,将来宾的人数限制在50人以内。(提示,先创建关系Female和关系Male。)
在这里插入图片描述

第六章,关系数据库理论

一、理解并给出下列术语的定义: 函数依赖、部分函数依赖、完全函数依赖、传递依赖、候选码、主码、外码、全码(All 一key )、1 NF 、ZNF 、3NF 、BcNF 、多值依赖、4NF 。

1、 函数依赖:设R(U)是属性集上的关系模式,X,Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y,或Y函数依赖于X,记作X→Y。

2、部分函数依赖:在R(U)中,如果X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖。

3、完全函数依赖:在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有Y不函数依赖于X’,则称Y对X完全函数依赖。

4、传递依赖:在R(U)中,如果X→Y(Y不属于X),X不函数依赖于Y,Y→Z(Z不属于Y)则称Z对X传递函数依赖。
U是完全函数依赖于K,而不是部分依赖于K。若U部分依赖于K,则K称为超码。候选码是最小的超码。

5、候选码:设K为R<U,F>中的属性或者属性组合,若U完全函数依赖于K,则K为R的候选码。

6、 主码:若候选码多余一个,则选定其中的一个为主码。

7、外码:关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外部码,也称外码。

8、全码:关系模式R中整个属性组是码,称为全码。

9、1NF:若关系模式R的每一个分量是不可再分的数据项,则关系模式R属于第一范式(1NF)。

10、2NF:若R∈1NF,且每一个非主属性完全函数依赖于任何一个候选码,则R∈2NF。

11、3NF:设关系模式R<U,F>∈1NF,若R中不存在这样的码X,属性组Y及非属性组Z(Z不是Y的子集),使得X→Y,Y→Z成立(X不函数依赖于Y),则称R∈3NF。

12、BCNF:关系模式R<U,F>∈1NF,若X→Y且Y不属于X时,X必含有码,则R∈BCNF。

二、建立一个关系、学生、班级、学会等诸信息的关系数据库。

学生:学号、姓名、出生年月、系名、班号、宿舍区。
班级:班号、专业名、系名、人数、入校年份。
系:系名、系号、系办公地点、人数。
学会:学会名、成立年份、办公地点、人数。
语义如下:一个系有若干专业,每个专业每年只招一个班,每个班有若干学生。一个系的学生住在同一宿舍区。每个学生可参加若干学会,每个学会有若干学生。学生参加某学会有一个入会年份。
请给出关系模式,写出每个关系模式的极小函数依赖集,指出是否存在传递函数依赖,对于函数依赖左部是多属性的情况讨论函数依赖是完全函数依赖,还是部分函数依赖。指出各关系模式的候选码、外部码,有没有全码存在?
(1)
学生(学号,姓名,出生年月,系名,班号,宿舍区)
班级(班号,专业名,系名,人数,入校年份)
系(系名,系号,系办公地点,人数)
学会(学会名,成立年份,办公地点,人数)
学生-学会(学号,姓名,学会名,入会年份)
(2)
1、学生(学号,姓名,出生年月,系名,班号,宿舍区)
最小函数依赖集:
学号→姓名,学号→出生年月,学号→系名,学号→班号,系名→宿舍区
传递函数依赖:
学号->系名,系名->宿舍区
候选码:学号
外码:班号、系名
2、班级(班号,专业名,系名,人数,入校年份)
最小函数依赖集:
班号→专业名,班号→人数,班号→入校年份,专业名→系名
传递函数依赖:
班号->系名,系名->系办公室地点
候选码:班号
外码:系名
3、系(系名,系号,系办公地点,人数)
最小函数依赖集如下:
系号→系名,系名→系号,系号→系办公室地点,系号→人数
无传递函数依赖。
候选码:系号和系名
外码:无
4、学会(学会名,成立年份,办公地点,人数)
最小函数依赖集如下:
学会名→成立年份,学会名→地点,学会名→人数
无传递函数依赖。
候选码:学会名
外码:无
5、学生-学会(学号,学会名,入会年份)
最小函数依赖集:(学号,学会名)→入会年份
无传递函数依赖。(学号,学会名)→入会年份是完全函数依赖。
候选码:(学号,学会名)
外码:学号,学会名

七、下面的结论哪些是正确的? 哪些是错误的? 对于错误的请给一个反例说明之。

(1)任何一个二目关系是属于3NF。
正确。因为关系模式中只有两个属性,所以无传递。
(2)任何一个二目关系是属于BCNF.
正确。按BCNF的定义,若X->Y,且Y不是X的子集时,每个决定因素都包含码,对于二目关系决定因素必然包含码。详细证明如下:(任何二元关系模式必定是BCNF)。
证明:设R为一个二目关系R(A1,A2),则属性A1和A2之间可能存在以下几种依赖关系:
A、A1->A2,但A2A1,则关系R的码为A1,决定因素都包含码,所以,R是BCNF。
B、A1->A2,A2A1,则关系R的码为A2,所以决定因素都包含码,R是BCNF。

第七章 数据库设计

一、试述数据库设计过程。

( l )需求分析:准确了解与分析用户需求(包括数据与处理)。
( 2 )概念结构设计:通过对用户需求进行综合、归纳与抽象,形成一个独立于具体 DBMS 的概念模型。
( 3 )逻辑结构设计:将概念结构转换为某个 DBMS 所支持的数据模型,并对其进行优化。
( 4 )数据库物理设计:为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。
( 5 )数据库实施:设计人员运用 DBMS 提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。
( 6 )数据库运行和维护:在数据库系统运行过程中对其进行评价、调整与修改。
   这是一个完整的实际数据库及其应用系统的设计过程。不仅包括设计数据库本身,还包括数据库的实施、运行和维护。
   设计一个完善的数据库应用系统往往是上述六个阶段的不断反复。

二、试述数据库设计过程中形成的数据库模式。

数据库结构设计的不同阶段形成数据库的各级模式,即:
( l )在概念设计阶段形成独立于机器特点,独立于各个 DBMS 产品的概念模式,在本篇中就是 E-R 图;
( 2 )在逻辑设计阶段将 E 一 R 图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式,然后在基本表的基础上再建立必要的视图 (view),形成数据的外模式;
( 3 )在物理设计阶段,根据 DBMS 特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式。

三、 需求分析阶段的设计目标就是什么?调查的内容就是什么?

需求分析阶段的设计目标:通过具体调查现实世界要处理的对象(组织,部门,企业等),充分明白原系统(手工系统或运算机系统)工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能;
调查的内容就是“数据”与“处理” , 即获得用户对数据库的如下要求
( 1)信息要求;指用户需要从数据库中获得信息的内容与性质;由信息要求可以导出数据要求
,即在数据库中需要储备哪些
数据;
(2) 处理要求;指用户要完成什么处理功能 ,对处理的响应时间有什么要求 ,处理方式就是批处理仍就是联机处理;
(3) 安全性与完整性要求;

四、数据字典的内容与作用就是什么?

数据字典就是系统中各类数据描述的集合﹔数据字典的内容通常包括∶数据项,数据结构,数据流、数据储备,处理过程五个部分。其中数据项就是数据的最小组成单位―,如干个数据项可以组成一个数据结构;数据字典通过对数据项与数据结构的定义来描述数据流,数据储备的规律内容﹔
数据字典的作用:数据字典就是关于数据库中数据的描述―,在需求分析阶段建立﹐就是下一步进行概念设计的基础,并在数据库设计过程中不断修改,充实,完善;

五、什么是数据库的概念结构?试述其特点和设计策略。

概念结构是信息世界的结构,即概念模型,其主要特点是:
( 1 )能真实、充分地反映现实世界,包括事物和事物之间的联系,能满足用户对数据的处理要求,是对现实世界的一个真实模型;
( 2 )易于理解,从而可以用它和不熟悉计算机的用户交换意见,用户的积极参与是数据库设计成功的关键;
( 3 )易于更改,当应用环境和应用要求改变时,容易对概念模型修改和扩充;
( 4 )易于向关系、网状、层次等各种数据模型转换。

七、学校中有若干系,每个系有若干班级和教研室,每个教研室有若干教员,其中有的教授和副教授每人各带若干研究生;每个班有若干学生,每个学生选修若干课程,每门课可由若干学生选修。请用 E-R 图画出此学校的概念模型。

在这里插入图片描述

八、某工厂生产若干产品,每种产品由不同的零件组成,有的零件可用在不同的产品上。这些零件由不同的原材料制成,不同零件所用的材料可以相同。这些零件按所属的不同产品分别放在仓库中,原材料按照类别放在若干仓库中。请用 E 一 R 图画出此工厂产品、零件、材料、仓库的概念模型。

在这里插入图片描述

九、什么是数据库的逻辑结构设计?试述其设计步骤。

数据库的逻辑结构设计就是把概念结构设计阶段设计好的基本 E 一 R 图转换为与选用的 DBMS 产品所支持的数据模型相符合的逻辑结构。设计步骤为 :
( l )将概念结构转换为一般的关系、网状、层次模型;
( 2 )将转换来的关系、网状、层次模型向特定 DBMS 支持下的数据模型转换;
( 3 )对数据模型进行优化。

十一、试用规范化理论中有关范式的概念分析习题7设计的关系模型中各个关系模式的候选码,它们属于第几范式?会产生什么更新异常?

系(系号,系名,所属学校名)
班级(班级号,班级名,所属系号)
教研室(教研室号,教研室名称,所属系号)
教员(工号,姓名,职称,所属教研室号)
学生(学号,姓名,所属班号,学历,导师工号)
课程(课序号,课程名)
选课(学号课序号,成绩)
习题7的各个关系模式的候选码如上,以下划线标注

各关系模式非主属性均完全函数依赖于候选码,属于2NF
各关系模式无传递关系,属于3NF
候选码只有一个,各关系模式决定因素只有主码,即均包含码,属于BCNF
综上,都属于BCNF,不会产生更新异常

第九章。关系查询处理和查询优化

一、试述查询优化在关系数据库系统中的重要性和可能性。

1、重要性:查询优化在关系数据库系统中有着非常重要的地位。关系数据库系统和非过程化的SQL之所以能够取得巨大的 成功,关键得益于查询优化技术的发展。它是影响关系数据库管理系统性能的关键因素。
2、可能性:由于关系表达式的语义级别较高,使关系系统可以从关系表达式中分析查询语义,提供了执行查询优化的可能性。

二、假设关系R(A, B)和S(B, C, D)情况如下: R有20 000个元组,S有1 200个元组,一个块能装40个R的元组,能装30个S的元组,估算下列操作需要多少次磁盘块读写。

(

三、对学生-课程数据库,查询信息系学生选修了的所有课程名称。

SELECT Cname
FROM Student, Course, Sc
WHERE Student.Sno SC.Sno AND SC.Cno=Course.Cno AND Student.Sdept =‘IS’:
试画出用关系代数表示的语法树,并用关系代数表达式优化算法对原始的语法树进行优化处理,画出优化后的标准语法树。

请添加图片描述

四、对于下面的数据库模式

Teacher Tno Tname, Tage, Tsex); Department Dno. Dname, Tno); Work (Tno, Dno, Year, Salary)
假设Teacher的Tno属性、Department 的Dno属性以及Work的Year属性上有B+树索引,说明下列查询语句的一种较优的处理方法。
(1) select * from teacher where Tsex=‘女’
Tsex无索引,所以直接全表扫描
(2) select * from department where Dno< 301
Dno属性有b+树索引,采用索引扫描法
(3) select* from work where Year< 2000
全表扫描
(4) select* from work where year > 2000 and salary < 5000
利用B+树先找到year=2000的索引项,以此为入口点再B+树的顺序集上得到year>2000的多有元组指针,通过这些指针再work表中检索salsry<5000
(5) selet* from work where year< 2000 or salary < 5000
是or,即取共并集,直接全表扫描

五、对于题4中的数据库模式,有如下的查询:

select Tname
from teacher, department, work
where teacher.tno -=work.tno and department.dno = work.dno and department dname“计算机系 and salary> 5000
画出语法树以及用关系代数表示的语法树,并对关系代数语法树进行优化,画出优化后的语法树。

六、 试述关系数据库管理系统查询优化的一般准则。

  • 代数优化的一般准则
    1、选择运算尽可能先做
    2、 把投影运算和选择运算同时进行
    3、把投影同其前或后的双目运算结合起来,没有必要单独进行
    4、把某些选择同在其前面要执行的笛卡尔乘积结合在一起,合成一个连接运算
    5、找出公共子表达式
  • 物理优化的一般准则
    1、选择操作的启发式规则
    2、连接操作的启发式规则

七、查询处理步骤

关系数据库管理系统查询处理分为四个步骤:查询分析、查询检查、查询优化和查询执行
1、查询分析:首先对查询语句进行扫描、词法分析和语法分析。
2、查询检查:对合法的查询语句进行语义检查。如果该用户没有相应访问权限或者违反了完整性约束,就拒绝执行该查询。但是这时候完整性检查时初步的、静态的检查。检查之后将SQL查询语句转化为内部标识,也就是等价的关系代数表达式。DBMS一般都用语法分析树来表示扩展的关系代数表达式,对于这部分,更详细的请参见《编译原理》
3、查询优化:查询优化是选择一个高效执行的查询处理策略。查询优化方法按照优化的层次一般可分为代数优化和物理优化
4、查询执行:根据优化器得到的策略生成查询执行计划,由代码生成器生成执行这个查询计划的代码,然后执行并返回结果

第十章、数据库恢复技术

一、试述事务的概念及事务的四个特性

事务就是用户定义的一个数据库操作序列, 这些操作要么全做要么全不做, 就是一个不行分割的工作单位;
事务具有四个特性: 原子性( Atomicity), -样性(Consistency), 隔离性(Isolation)与连续性(Durability)
;这个四个特性也简称为ACID 特
1、原子性:事务就是数据库的规律工作单位,事务中包括的诸操作要么都做, 要么都不做;
2、一样性:事务执行的结果必需就是使数据库从一个一样性状态变到另一个一样性状态;
3、隔离性:一个事务的执行不能被其她事务干扰;即一个事务内部的操作及使用的数据对其她并发事务就是隔离的
,并发执行的各个事务之间不能相互干扰;
4、连续性:连续性也称永久性( Permanence),指一 个事务一旦提交,它对数据库中数据的转变就应当就是永久性的;接下来的其他操作或故障不应当对其执行结果有任何影响;

二、为什么事务非正常终止时会影响数据库数据的正确性, 请列举一例说明之;

事务执行的结果必需就是使数据库从一个一样性状态变到另一个一样性状态;假如数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态
或者说就是不一样的状态;
例如某I厂的库存治理系统中, 要把数量为Q的某种零件从仓库 1移到仓库2存放;就可以定义一个事务T,T 包括两个操作;Q1=Q1-Q,Q2=Q2+Q假如 T非正常终止时只做了第一个操作, 就数据库就处于不一样状态,库存量无缘无故少了Q;

三、登记日志文件时为什么必需先写日志文件 ,后写数据库?

把对数据的修改写到数据库中与把表示这个修改的日志记录写到日志文件中就是两个不同的操作;有可能在这两个操作之间发生故障,即这两个写操作只完成了一个;假如先写了数据库修改,而在运行记录中没有登记这个修改, 就以后就无法复原这个修改了;假如先写日志,但没有修改数据库,在复原时只不过就是多执行一次 UNDO操作,并不会影响数据库的正确性;所以肯定要先写日志文,即第一把日志记录写到日志文件中,然后写数据库的修改;

四、在这里插入图片描述

(1)如果系统故障发生在14之后,说明哪些事务需要重做,哪些事务需要回滚。
已提交的重做,未提交的回滚

T1,T3需要重做,T2,T4回滚

(2)如果系统故障发生在10之后,说明哪些事务需要重做,哪些事务需要回滚。

T1重做,T2,T3回滚

(3)如果系统故障发生在9之后,说明哪些事务需要重做,哪些事务需要回滚。

T1重做,T2,T3回滚

(4)如果系统故障发生在7之后,说明哪些事务需要重做,哪些事务需妥回滚。

T1重做,T2回滚

五、考虑题4所示的日志记录,假设开始时A B、C的值都是0:

(1)如果系统故障发生在14之后,写出系统恢复后A、B、C的值: :

14之后 T1,T3重做,T2,T4回滚 那么 A:8 B: 7 C:11

(2)如果系统故障发生在12之后,写出系统恢复后A、B、C的值:

12之后

T1重做,T2,T3,T4回滚

A=10

B=0

C=11

(3)如果系统故障发生在10之后,写出系统恢复后A、B、C的值:

10之后

T1重做

T2,T3回滚

A:10

B:0

C: 11

(4)如果系统故障发生在9之后,写出系统恢复后小、B、C的值:

T1重做
T2,T3回滚
A:10
B: 0
C:11

(5)如果系统故障发生在7之后,写出系统恢复后小B、C的值:

T1重做
T2回滚
A:10
B:0
C:11

(6)如果系统故障发生在5之后,写出系统恢复后A、B、C的值.

T1,T2回滚

A:0

B:0

C:0

六、针对不同的故障,试给出恢复的策略和方法。(即如何进行事务故障的恢复?系统故障的恢复?介质故障恢复?)

1、 事务故障的恢复:
  事务故障的恢复是由DBMS自动完成的,对用户是透明的。
  DBMS执行恢复步骤是:
  (1)反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。
  (2)对该事务的更新操作执行逆操作。即将日志记录中“更新前的值”写入数据库。
  (3)继续反向扫描日志文件,做同样处理。
  (4)如此处理下去,直至读到此事务的开始标记,该事务故障的恢复就完成了。

2、系统故障的恢复:
  系统故障可能会造成数据库处于不一致状态:
  一是未完成事务对数据库的更新可能已写入数据库;
  二是已提交事务对数据库的更新可能还留在缓冲区,没来得及写入数据库。
  因此恢复操作就是要撤销(UNDO)故障发生时未完成的事务,重做(REDO)已完成的事务。
  系统的恢复步骤是:
  (1)正向扫描日志文件,找出在故障发生前已经提交的事务队列(REDO队列)和未完成的事务队列(UNDO队列)。
  (2)对撤销队列中的各个事务进行UNDO处理。
  进行UNDO处理的方法是,反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作,即将日志记录中“更新前的值”(Before Image)写入数据库。
  (3)对重做队列中的各个事务进行REDO处理。
  进行REDO处理的方法是:正向扫描日志文件,对每个REDO事务重新执行日志文件登记的操作。即将日志记录中“更新后的值”(After Image)写入数据库。
  *解析:
  在第(1)步中如何找出REDO队列和UNDO队列?请大家思考一下。
  下面给出一个算法:
  1) 建立两个事务队列:
  · UNDO-LIST: 需要执行undo操作的事务集合;
  · REDO-LIST: 需要执行redo操作的事务集合;
  两个事务队列初始均为空。
  2) 从日志文件头开始,正向扫描日志文件
  · 如有新开始(遇到Begin Transaction)的事务Ti,把Ti暂时放入UNDO-LIST队列;
  · 如有提交的事务(遇到End Transaction)Tj,把Tj从UNDO-LIST队列移到REDO-LIST队列;
  直到日志文件结束
3、介质故障的恢复:
  介质故障是最严重的一种故障。
  恢复方法是重装数据库,然后重做已完成的事务。具体过程是:
  (1)DBA装入最新的数据库后备副本(离故障发生时刻最近的转储副本),使数据库恢复到转储时的一致性状态。
  (2)DBA装入转储结束时刻的日志文件副本
  (3)DBA启动系统恢复命令,由DBMS完成恢复功能,即重做已完成的事务。
  *解析
1)我们假定采用的是静态转储,因此第(1)步装入数据库后备副本便可以了。
2)如果采用的是静动态转储,第(1)步装入数据库后备副本还不够,还需同时装入转储开始时刻的日志文件副本,经过处理后才能得到正确的数据库后备副本。
3)第(2)步重做已完成的事务的算法是:
a. 正向扫描日志文件,找出故障发生前已提交的事务的标识,将其记入重做队列
  b. 再一次正向扫描日志文件,对重做队列中的所有事务进行重做处理。即将日志记录中“更新后的值”写入数据库。

第十一章、并发控制

一、数据库中为什么要并发控制?并发控制技术能保证事务那些特性?

如果事务是串行执行,会让大部分资源得不到利用,数据库采用并发采用,使多个事
务可以同时进行,充分利用系统资源,但这会使事务ACID特性遭到破坏,因此需要采
用并发控制;隔离性、一致性。

二、并发操作可能产生哪几类数据不一致?用什么方法能避免不一致情况。

丢失修改(两事务同时修改)、不可重复读(一个事务读之后,另一个事务 进行了修
改、插入、删除)、读脏数据(一个改,一读,但改的被撤销了)。
可以采用封锁、时间戳和乐观控制法、多版本并发控制等。

三、什么是封锁?基本类型有?试述他们的含义

封锁就是事务T对数据进行操作之前向系统请求加锁,加锁后T对数据有一定控制能力,
锁为释放,其他事务对该数据不能更新。
基本类型有排他锁(X锁),共享锁(S锁)。
排它锁指只有T可以对其进行读写操作,锁未释放之前,其他事务不可加锁,不可读
写该数据;共享锁指T可以进行读,锁未释放之前,其他事务只能加S锁,进行读操作。

四、如何用封锁机制保证数据的一致性

DBMS在对数据进行读写操作之前首先对该数据库执行封锁操作,例如图中事务T1在对A进行修改之前先对A执行Xock(A)即对A机上X锁。这样T2请求对A加X锁时就被拒绝,T2只能等待T1
释放A上的锁后才能获得对A的X锁,这时它读到的A是T1更新后的值,再按此新的A值进行运算。。这样就不会丢失T1的更新。

https://blog.csdn.net/weixin_43413095/article/details/123824084
DBMS按照一定的封锁协议对并发操作进行控制,使得多个并发操作有序 的执行,就可以避免丢失修改、不可重复读和读”脏“数据不一致性。

五、什么是活锁?试述活锁产生的原因和解决办法

如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待,T3也请求封锁R,当T1释放R上的封锁之后系统首先批准T3的请求,T2仍然等待。然后T4又请求封锁R,当T3释放R上的封锁系统批准T4的请求。。。T2有可能永远等待,如下图所示,这就是活锁的情形。活锁的含义是该等待事务等待时间太长,似乎被封锁住了,实际上可能被激活。
————————————————
版循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43413095/article/details/123824084
活锁产生的原因:当一系列的封锁不能按照先后顺序执行时,就可能导致一些事务无限期等待某哦个封锁,从而导致活锁。
避免获得活锁的简单方法时采用先来先服务的策略。当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第一个事务获得锁。

六、什么是死锁?给出解决预防死锁的方法

如果事务T1封锁了数据R1,T2封锁了数据R2,然后T1又请求封锁R2,因T2已经封锁了R2,于是T1等待T2释放R2上的锁。接着T2又申请封锁R1,因T1已封锁了R1,T2也只能等待T1释放R1上的锁。如下图,这样就出现了T1在等待T2,而T2又在等待T1的局面,T1、T2两个事务永远不能结束,形成死锁。
https://blog.csdn.net/weixin_43413095/article/details/123824084
防止死锁的发生其实就是要破坏产生死锁的条件,预防死锁通常有两种方法:
1、一次封锁法
要求 每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。
2、顺序封锁法
预先对数据对象规定一个封锁顺序,所有的事务都按照这个顺序实行封锁

七、请给出检测死锁发生一种方法,当发生死锁后如何解除死锁?

数据库系统一般采用的方法 是允许死锁发生,DBMS检测死锁发生后解除。
DBMS中诊断死锁的方式与操作系统类似,一般使用超时法或事务等待图法。
超时法是指如果一个事务的等待时间超过了规定的实现,一般就认为发生了死锁。
DBMS并发控制子系统检测到死锁后,就要设法解除。通常采用的方法是选择一个处理死锁代价最小的事务,将其撤销,释放此事务持有的所有锁,使其他事务得以继续运行下去。

八、什么样的并发调度是正确的调度?

可串行化调度,其结果与事务某一次序串行执行这些事务的结果相同。
注意思考怎么得到不可串行调度:把所有串行执行列出来,找一个结果不等于他们的
调度。

九、设T、T2、T,是如下的三个事务,设A的初值为0.

T: A:=A+2;
T2: A=A2:
Tz: A:=A**2; (即A←A^2)
(1)若这三个事务允许并发执行,则有多少种可能的正确结果?请一- -列举出来。
(2)请给出一个可串行化的调度,并给出执行结果。
(3)请给出一个非串行化的调度,并给出执行结果。
(4)若这三个事务都遵守两段锁协议,请给出一个不产生死锁的可串行化调度。
(5)若这三个事务都遵守两段锁协议,请给出一个产生死锁的调度。
设T1、T2、T3,是如下的三个事务,设A的初值为0。
T1:A:=A+2;
T2:A:=A2;
T3:A:=A
A;(A←A^2)
①若这三个事务允许并行执行,则有多少可能的正确结果,请一以列举出来
答:
A的最终结果可能有2、4、8、16。
因为串行执行次序有T1T2T3;T1T3T2;T2T1T3;T2T3T1;T3T1T2;T3T2T1。对应的执行结果是16;8:4;2;4;2。
②请给出一个可串行化的调度4井给出执行结果
在这里插入图片描述
最后结果A为16,是可串行化的调度。

十、今有三个事务的一个调度r(B)r(A)w3(B)r(B)r(A)w2(B)r(B)w,(A), 该调度是冲突可串行化的调度吗?为什么?

是冲突可串行化的调度。
Scl=r3(B) r1(A) w3(B) r2(B) r2(A) w2(B) r1(B) w1(A),交换r1(A)和w3(B),得到
r3(B) w3(B) r1(A) r2(B) r2(A) w2(B) r1(B) w1(A)
再交换r1(A)和r2(B) r2(A) w2(B),得到
Sc2=r3(B) w3(B) r2(B) r2(A) w2(B) r1(A) r1(B) w1(A)
由于Sc2是串行的,而且两次交换都是基于不冲突操作的,所以
Sc1=r3(B) r1(A) w3(B) r2(B) r2(A) w2(B) r1(B) w1(A)
是冲突可串行化的调度。

十四、考虑T1和T2两个事务。

T1: R(A); R(B);B=A+B; W(B)
T2:R(B); R(A);A=A+B; W(A)
(1)改写T1和T2,增加加锁操作和解锁操作, 并要求遵循两阶段封锁协议。
在这里插入图片描述
(2)说明T1和T2的执行是否会引起死锁,给出T1和T2的一个调度并说明之。
在这里插入图片描述

十五、为什么要引进意向锁?意向锁的含义是什么?

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

  • 2
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值