文章说明:本文内容来自浙江科技学院软件工程本科专业课程《数据库原理与应用》的作业。该课程使用的教材为《数据库系统概论(第5版)》(王珊等编著,高等教育出版社),作业部分来自章后习题。本自解答完成后参考出版社提供的《习题解析与实验指导》进行了订正。
文章结构说明:本文按照“篇-章-题目”的结构组织,“篇-章”结构来自教材目录,题目的编号即为章后习题原编号。
版本历史:2020年3月创建Word初稿,2021年2月Word终稿存档,2023年8月31日Markdown第一版,9月4日Markdown第二版。
文章TODO:
- 嵌入SQL脚本文件
- 相关博文:MySQL5.7安装教程
- 含有本文全部SQL的Jupyter交互式笔记本。
第一篇 基础篇
第1章 绪论
1.试述数据、数据库、数据库管理系统、数据库系统的概念。
(1)数据(data,在科技英语中用作复数名词,其单数形式是datum):描述事物的符号记录称为数据,类型可以是数字,也可以是文字、图形、图像、音频、视频等。 记录(record) 是计算机中表示和存储数据的一种格式或一种方法。
(2)数据库(database,DB):是长期储存在计算机内的、有组织的、可共享的大量数据的集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。
(3)数据库管理系统(DBMS):是位于用户与操作系统之间的一层数据管理软件。
(4)数据库系统:是由数据库、数据库管理系统(及其应用开发工具)、应用程序和数据库管理员组成的存储、管理、处理和维护数据的系统。
7.什么是概念模型?试述概念模型的作用。
概念模型是第一类数据模型,也称信息模型,它是按用户的观点来对数据和信息建模,主要用于数据库设计。概念模型用于信息世界的建模,是现实世界到信息世界的第一层抽象,是数据库设计人员进行数据库设计的有力工具,也是数据库设计人员和用户之间进行交流的语言。
8.定义并解释概念模型中以下术语:实体,实体型,实体集,实体之间的联系。
(1)客观存在并可互相区别的事物称为实体(entity)。
(2)用实体名及其属性名集合来抽象和刻画同类实体,称为实体型。
(3)同一类型的实体的集合称为实体集。
(4)现实世界中事物之间的联系在信息世界中反映为实体之间的联系,通常是指不同实体集之间的联系。
9.试述数据模型的概念、数据模型的作用和数据模型的三个要素。
(1)数据模型是对现实世界数据特征的抽象的工具,是数据库中用于提供信息表示和操作手段的形式构架。一般地讲,数据模型是严格定义的一组概念的集合,这些概念精确地描述了系统的静态特性、动态特性和完整性约束条件。
(2)作用:数据模型是数据库系统的核心和基础。
(3)在数据模型的三个要素中,数据结构描述数据库的组成对象以及对象之间的联系,是对系统静态特性的描述;数据操作指对数据库中各种对象(型)的示例(值)允许执行的操作的集合,包括操作及有关的操作规则,是对系统动态特性的描述;数据的完整性约束是一组完整性规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据正确、有效、相容。
13.试述关系模型的概念,定义并解释概念模型中以下术语:关系,属性,域,元组,码,分量,关系模式。
关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。从用户观点看,每个关系的数据结构是一张规范化的二维表。
(1)关系(relation):一个关系对应通常说的一张表。
(2)属性(attribute):表中的一列即为一个属性。
(3)域(field):属性的取值范围。
(4)元组(tuple):表中的一行即为一个元组。
(5)码(key):也称码键。表中的某个属性组,它可以唯一确定一个元组。
(6)分量(component):元组中的一个属性值。
(7)关系模式:对关系的描述,一般表示为关系名(属性1,属性2,… ,属性n)。
15.试述数据库系统的三级模式结构,并说明这种结构的优点是什么。
数据库系统的三级模式结构是指数据库系统是由外模式、模式和内模式三级构成。数据库系统的三级模式是数据的三个抽象级别,它把数据的具体组织留给数据库管理系统管理,使用户能逻辑地、抽象地处理数据,而不必关心数据在计算机中的具体表示方式与存储方式。数据库管理系统提供的外模式/模式映像和模式/内模式映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。
16.定义并解释以下术语:模式,外模式,内模式,数据定义语言,数据操纵语言。
(1)模式(mode):也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。模式描述的是数据的全局逻辑结构。外模式通常是模式的子集。
(2)外模式:也称子模式或用户模式,它是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图。
(3)内模式:也称存储模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。
(4)数据定义语言(DDL):用来定义数据库模式、外模式、内模式的语言。(data description language)
(5)数据操纵语言(DML):用来对数据库的数据进行查询、插入、删除和修改的语句。(data manipulation language)
17.什么叫数据与程序的物理独立性?什么叫数据与程序的逻辑独立性?为什么数据库系统具有数据与程序的独立性?
(1)数据与程序的物理独立性是指用户的应用程序与数据库中数据的物理存储是相互独立的。
(2)数据与程序的逻辑独立性是指用户的应用程序与数据库的逻辑结构是相互独立的。
(3)数据库系统三级模式和两层映像的系统结构使得数据库系统具有数据与程序的独立性。
第2章 关系数据库
习题2.6 用关系代数表达查询
设有一个三建工程项目,对应一个名为SPJ的数据库,包括S、P、J、SPJ这4个关系模式:
S(SNO,SNAME,STATUS,CITY)
P(PNO,PNAME,COLOR,WEIGHT)
J(JNO,JNAME,CITY)
SPJ(SNO,PNO,JNO,QTY)
- 供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成。
- 零件表P由零件代码(PNO)、零件名(PNAME)、颜色(COLOR)、重量(WEIGHT)组成。
- 工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成。
- 供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,表示某供应商供应某种零件给某工程项目的数量为QTY。
今有若干数据如下:
(1)S表
SNO | SNAME | STATUS | CITY |
---|---|---|---|
S1 | 精益 | 20 | 天津 |
S2 | 盛锡 | 10 | 北京 |
S3 | 东方红 | 30 | 北京 |
S4 | 丰泰盛 | 20 | 天津 |
S5 | 为民 | 30 | 上海 |
(2)P表
SNO | SNAME | STATUS | CITY |
---|---|---|---|
S1 | 精益 | 20 | 天津 |
S2 | 盛锡 | 10 | 北京 |
S3 | 东方红 | 30 | 北京 |
S4 | 丰泰盛 | 20 | 天津 |
S5 | 为民 | 30 | 上海 |
(3)J表
SNO | SNAME | STATUS | CITY |
---|---|---|---|
S1 | 精益 | 20 | 天津 |
S2 | 盛锡 | 10 | 北京 |
S3 | 东方红 | 30 | 北京 |
S4 | 丰泰盛 | 20 | 天津 |
S5 | 为民 | 30 | 上海 |
(4)SPJ表
SNO | PNO | JNO | QTY |
---|---|---|---|
S1 | P1 | J1 | 200 |
S1 | P1 | J3 | 100 |
S1 | P1 | J4 | 700 |
S1 | P2 | J2 | 100 |
S2 | P3 | J1 | 400 |
S2 | P3 | J2 | 200 |
S2 | P3 | J4 | 500 |
S2 | P3 | J5 | 400 |
S2 | P5 | J1 | 400 |
S2 | P5 | J2 | 100 |
S3 | P1 | J1 | 200 |
S3 | P3 | J1 | 200 |
S4 | P5 | J1 | 100 |
S4 | P6 | J3 | 300 |
S4 | P6 | J4 | 200 |
S5 | P2 | J4 | 100 |
S5 | P3 | J1 | 200 |
S5 | P6 | J2 | 200 |
S5 | P6 | J4 | 500 |
试用关系代数完成如下查询:
(1)求供应工程J1零件的供应商号码SNO;
(2)求供应工程J1零件P1的供应商号码SNO;
(3)求供应工程J1零件为红色的供应商号码SNO;
(4)求没有使用天津供应商生产的红色零件的工程号JNO;
(5)求至少用了供应商S1所供应的全部零件的工程号JNO。
TODO 答案
第3章 关系数据库标准语言SQL
习题3.4 SQL语句:建表、查询
一、用SQL语句建立习题2.6中的4个表。
CREATE TABLE S(
SNO VARCHAR(255) NOT NULL,
SNAME VARCHAR(255),
STATUS CHAR(2),
CITY VARCHAR(255),
PRIMARY KEY(SNO)
);
CREATE TABLE P(
PNO VARCHAR(255) NOT NULL,
PNAME VARCHAR(255),
COLOR VARCHAR(255),
WEIGHT INT,
PRIMARY KEY(PNO)
);
CREATE TABLE J(
JNO VARCHAR(255) NOT NULL,
JNAME VARCHAR(255),
CITY VARCHAR(255),
PRIMARY KEY(JNO)
);
CREATE TABLE SPJ(
SNO VARCHAR(255) NOT NULL,
PNO VARCHAR(255) NOT NULL,
JNO VARCHAR(255) NOT NULL,
QTY INT,
PRIMARY KEY(SNO,PNO,JNO)
);
二、针对建立的4个表用SQL完成习题2.6中的查询。
(1)求供应工程J1零件的供应商号码SNO。
SELECT DISTINCT SNO FROM SPJ WHERE JNO='J1';
(2)求供应工程J1零件P1的供应商号码SNO。
SELECT SNO FROM SPJ WHERE JNO='J1' AND PNO='P1';
(3)求供应工程J1零件为红色的供应商号码SNO。
SELECT SNO FROM spj,p WHERE JNO='J1' AND spj.PNO=p.PNO AND COLOR='红';
(4)求没有使用天津供应商生产的红色零件的工程号JNO。
SELECT JNO
FROM j
WHERE JNO NOT IN
(SELECT DISTINCT JNO
FROM spj,s,p
WHERE spj.SNO=s.SNO AND
spj.PNO=p.PNO AND
CITY='天津' AND
COLOR='红'
);
(5)求至少用了供应商S1所供应的全部零件的工程号JNO。
SELECT DISTINCT JNO FROM spj t WHERE NOT EXISTS(
SELECT PNO FROM
(SELECT PNO FROM spj WHERE SNO='S1') AS t1
WHERE PNO NOT IN
(SELECT PNO FROM spj WHERE SNO='S1' AND JNO=t.JNO)
);
【扩展】对于第5小题,可将查询要求用谓词公式表示,其语义为:找出这样的工程x,不存在这样的零件y,供应商S1供应了y,而工程x没有选用y。 根据以上分析,写出SQL语句如下。
习题3.5 SQL语句:更新
针对习题2.6中的4个表,试用SQL完成以下各项更新操作。
(1)找出所有供应商的姓名和所在城市;
SELECT SNAME,CITY FROM S;
(2)找出所有零件的名称、颜色、重量;
SELECT PNAME,COLOR,WEIGHT FROM P;
(3)找出所有使用供应商SI所供应零件的工程号码;
SELECT JNO FROM SPJ WHERE SNO='S1';
(4)找出工程项目J2使用的各种零件的名称及其数量;
SELECT PNAME,QTY FROM p,spj WHERE JNO='J2' AND p.PNO=spj.PNO;
(5)找出上海厂商供应的所有零件号码;
SELECT DISTINCT spj.PNO FROM s,spj WHERE CITY='上海' AND s.SNO=spj.SNO;
(6)找出使用上海产的零件的工程名称;
SELECT DISTINCT JNAME FROM s,spj,j
WHERE s.CITY='上海' AND s.SNO=spj.SNO AND spj.JNO=j.JNO;
(7)找出没有使用天津产的零件的工程号码;
SELECT JNO FROM j WHERE JNO NOT IN
(SELECT DISTINCT JNO FROM s,spj
WHERE 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 JNO='J4' AND PNO='P6';
(10)从供应商关系中删除S2的记录,并从供应情况关系中删除相应的记录;
DELETE FROM spj WHERE SNO='S2';
DELETE FROM s WHERE SNO='S2';
注意删除顺序。
(11)请将(S2,J6,P4,200)插入供应情况关系。
INSERT INTO spj(SNO,JNO,PNO,QTY) VALUES('S2','J6','P4',200);
习题3.9 基于视图的查询
一、为三建工程项目建立一个供应情况的视图,包括供应商代码(SNO)、零件代码(PNO)、供应数量(QTY)。
【自解答】CREATE view sp_sj AS(SELECT SNO,PNO,QTY FROM spj,j WHERE JNAME='三建' AND spj.JNO=j.JNO)
二、针对创建的视图,完成查询。
(1)找出三建工程项目使用的各种零件代码及其数量;
SELECT PNO,QTY FROM sp_sj;
(2)找出供应商S1的供应情况。
SELECT PNO,QTY FROM sp_sj WHERE SNO='S1';
第4章 数据库安全性
习题4.x 数据库安全性的概念
1.什么是数据库的安全性?
数据库安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏。
4.试述实现数据库安全性控制的常用方法和技术。
(1)用户身份鉴别:该方法由系统提供一定的方式让用户标识自己的名字或身份。每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供系统的使用权。
(2)存取控制:通过用户权限定义和合法性检查,确保只有合法权限的用户访问数据库,所有未被授权的人员无法存取数据。
(3)审计:建立审计日志,把用户对数据库的所有操作自动记录下来放入审计日志中,审计员可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。
(4)视图机制:为不同的用户定义视图,把数据对象限制在一定的范围内。也就是说,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。
(5)数据加密:对存储和传输的数据进行加密处理,从而使得不知道解密算法的人无法获知数据的内容。
5.什么是数据库中的自主存取控制方法和强制存取控制方法?
(1)自主存取控制方法:定义各个用户对不同数据对象的存取权限。当用户对数据库访问时首先检查用户的存取权限。
(2)强制存取控制方法:每一个数据库对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。对于任意一个对象,只有具有合法许可证的用户才可以存取。
习题4.6 GRANT授权语句
对下列两个关系模式:
学生(学号,姓名,年龄,性别,家庭住址,班级号)
班级(班级号,班级名,班主任,班长)
使用GRANT语句完成授权功能。
(1)授予用户UI对两个表的所有权限,并可给其他用户授权。
GRANT ALL PRIVILEGES ON TABLE 学生,班级 TO U1 WITH GRANT OPTION;
(2)授予用户U2对学生表具有查看权限,对家庭住址具有更新权限。
GRANT SELECT,UPDATE(家庭住址) ON TABLE 学生TO U2;
(3)将对班级表查看权限授予所有用户。
GRANT SELECT ON TABLE 班级 TO PUBLIC;
(4)将对学生表的查询、更新权限授予角色R1。
GRANT SELECT,UPDATE ON TABLE 学生TO R1;
(5)将角色R1授予用户U1,并且U1可继续授权给其他角色。
GRANT R1 TO U1 WITH ADMIN OPTION;
习题4.7 作用于视图的GRANT语句
今有以下两个关系模式:
职工(职工号,姓名,年龄,职务,工资,部门号)
部门(部门号,名称,经理名,地址,电话号)
请用SQL的GRANT语句(加上视图机制)完成授权定义或存取控制功能。
(1)用户王明对两个表有SELECT权限。
GRANT SELECT ON TABLE 职工,部门 TO 王明;
(2)用户李勇对两个表有INSERT和DELETE权限。
GRANT INSERT, DELETE ON TABLE 职工,部门 TO 李勇;
(3)每个职工只对自己的记录有SELECT权限。
GRANT SELECT ON TABLE 职工 WHEN USER()=NAME TO ALL ;
(4)用户刘星对职工表有SELECT权限,对工资字段具有更新权限。
GRANT SELECT, UPDATE(工资) ON TABLE 职工TO 刘星;
(5)用户张新具有修改这两个表的结构的权限。
GRANT ALTER ON TABLE 职工,部门 TO 张新;
(6)用户周平具有对两个表的所有权限(读、插、改、删数据),并具有给其他用户授权的权限。
GRANT ALL PRIVILEGES ON TABLE 职工,部门 TO 周平 WITH GRANT OPTION;
(7)用户杨兰具有从每个部门职工中SELECT最高工资、最低工资、平均工资的权限,他不能查看每个人的工资。
建立视图“部门工资”:CREATE VIEW 部门工资(最高工资,最低工资,平均工资) AS(SELECT 名称,MAX(工资), MIN(工资), AVG(工资) FROM 职工,部门 WHERE职工.部门号=部门.部门号 GROUP BY 部门.部门号);
GRANT SELECT ON TABLE 部门工资 TO 杨兰;
习题4.8 REVOKE语句
针对习题4.7中(1)-(7)的每一种情况,撤销各用户所授予的权限。
(1)REVOKE SELECT ON TABLE 职工,部门 FROM 王明;
(2)REVOKE INSERT, DELETE ON TABLE 职工,部门 FROM李勇;
(3)REVOKE SELECT ON TABLE 职工 WHEN USER()=NAME FROM ALL ;
(4)REVOKE SELECT, UPDATE ON TABLE 职工FROM 刘星;
(5)REVOKE ALTER ON TABLE 职工,部门 FROM 张新;
(6)REVOKE ALL PRIVILEGES ON TABLE 职工,部门 FROM 周平;
(7)REVOKE SELECT ON TABLE 部门工资 FROM 杨兰;DROP VIEW 部门工资;
第5章 数据库完整性
习题5.x 数据库完整性的概念
1.什么是数据库的完整性?
数据库的完整性是指数据的正确性和相容性。
2.数据库的完整性概念与数据库的安全性概念有什么区别和联系?
数据的完整性是为了防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。数据的安全性是保护数据库防止恶意破坏和非法存取。因此,完整性检查和控制的防范对象是不合语义的、不正确的数据,防止它们进入数据库。安全性控制的防范对象是非法用户和非法操作,防止他们对数据库数据的非法存取。
4.关系数据库管理系统的完整性控制机制应具有哪三方面的功能?
(1)定义功能:提供定义完整性约束条件的机制。
(2)检查功能:检查用户发出的操作请求是否违背了完整性约束条件。
(3)违约处理功能:若发现用户的操作违背了完整性约束条件,将采取一定的动作,以保证数据的完整性。
习题5.6 SQL语句:关系模式的定义
假设有下面两个关系模式:
职工(职工号,姓名,年龄,职务,工资,部门号),其中职工号为主码;
部门(部门号,名称,经理名,电话),其中部门号为主码。
用SQL语言定义这两个关系模式,要求在模式中完成以下完整性约束条件的定义:
(1)定义每个模式的主码;(2)定义参照完整性;(3)定义职工年龄不得超过60岁。
CREATE TABLE 职工(职工号,姓名,年龄,职务,工资,部门号
PRIMARY KEY(职工号),
FOREIGN KEY(部门号) REFERRECES 部门(部门号),
CONSTRAINT C1 CHECK(年龄<=60)
);
CREATE TABLE 部门(部门号,名称,经理名,电话
PRIMARY KEY(部门号)
);
【总结】表名、字段名要选用合适的英文单词来表示,各字段要分配合适的数据类型及长度。
习题5.7 关系系统对数据库完整性的保护措施
【问题】在关系系统中,当操作违反实体完整性、参照完整性和用户定义的完整性约束条件时,一般是如何分别进行处理的?
【答案】
实体完整性检查违约处理:拒绝插入或修改。
参照完整性检查违约处理:并不都是简单地拒绝执行,有时要根据应用语义执行一些附加的操作,以保证数据库的正确性。
用户定义的完整性检查违约处理:拒绝执行。
第二篇 设计与应用开发篇
第6章 关系数据理论
习题6.1 关系数据术语理解
理解并给出下列术语的定义:函数依赖、部分函数依赖、完全函数依赖、传递依赖、候选码、超码、主码、外码、全码(all-key)、1NF、2NF、3NF、BCNF、多值依赖、4NF。
TODO:完善助记
习题6.2 关系模式分析
建立一个关于系、学生、班级、学会等诸信息的关系数据库。
描述学生的属性有:学号、姓名、出生年月、系名、班号、宿舍区;
描述班级的属性有:班号、专业名、系名、人数、入校年份;
描述系的属性有:系名、系号、系办公室地点、人数;
描述学会的属性有:学会名、成立年份、地点、人数。
有关语义如下:一个系有若干专业,每个专业每年只招一个班,每个班有若干学生。一个系的学生住在同一宿舍区。每个学生可参加若干学会,每个学会有若干学生。学生参加某学会有一个入会年份。
(1)请给出关系模式,写出每个关系模式的极小函数依赖集,指出是否存在传递函数依赖,对于函数依赖左部是多属性的情况,讨论函数依赖是完全函数依赖还是部分函数依赖。
(2)指出各关系的候选码,外部码,并说明全码是否存在。
关系 | 候选码 | 外部码 |
---|---|---|
学生 | 学号 | 系名,班号 |
班级 | (班号)/(专业名,入校年份) | 系名 |
系 | (系名,系号) | |
学会 | 学会名 | |
参会 | (学会名,学号) |
全码是否存在:TODO
第7章 数据库设计
习题7上 数据库设计理论
1.试述数据库设计过程。
数据库设计分为6个阶段:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库运行和维护。
3.需求分析阶段的设计目标是什么?调查的内容是什么?
(1)设计目标:通过详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统(手工系统或计算机系统)的工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。
(2)调查内容:“数据”和“处理”,获得用户对数据库的信息要求(指用户需要从数据库中获得信息的内容与性质。由信息要求可以导出数据要求,即在数据库中需要存储哪些数据)、处理要求(指用户要完成什么处理功能,对处理的响应时间有什么要求,处理方式是批处理还是联机处理)、安全性与完整性要求。
4.数据字典的内容和作用是什么?
(1)内容:数据项、数据结构、数据流、数据存储和处理过程。其中数据项是数据的最小组成单位,若干个数据项可以组成一个数据结构。数据字典通过对数据项和数据结构的定义来描述数据流和数据存储的逻辑内容。
(2)作用:数据字典是关于数据库中数据的描述,在需求分析阶段建立,是下一步进行概念设计的基础。
6.定义并解释概念模型中以下术语:实体-联系图(E-R 图)
E-R图是描述实体型、属性和联系的方法。其中:
①实体型用矩形表示,矩形框内写明实体名。
②属性用椭圆形表示,并用无向边将其与对应的实体型连接起来。
③联系用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1:1,1:n或m:n)。
【批注】如果实体型数量超过5个且联系较为复杂,一般不画出属性椭圆形,而是将属性单独列表。
习题7下 E-R图转换为关系模型
7.学校中有若干系,每个系有若干班级和教研室,每个教研室有若干教员,其中有的教授和副教授每人各带若干研究生,每个班有若干学生,每个学生选修若干课程,每门课可由若干学生选修。请用E-R图画出此学校的概念模型。
【自解答】
【订正后的答案】
可见,“拥有”联系应改名为两端实体的连接词。
E-R图中各实体的属性假设如下:
系:系编号,系名;
班级:班号,班名;
教研室:教研室编号,室名;
学生:学号,姓名,学历;
课程:课程编号,课程名;
教员:职工号,姓名,职称;
各联系的属性为:
选修:成绩;
其他联系无属性。
8.某工厂生产若干产品,每种产品由不同的零件组成,有的零件可用在不同的产品上。这些零件由不同的原材料制成,不同零件所用的材料可以相同。这些零件按所属的不同产品分别放在仓库中,原材料按照类别放在若干仓库中。请用E-R图画出此工厂产品、零件、材料、仓库的概念模型。
【自解答】
【订正后的答案】
E-R图中各实体的属性假设如下:
产品:产品号,产品名
零件:零件号,零件名
材料:材料号,材料名,类别
仓库:仓库号,仓库名
各联系的属性为:
产品组成:使用零件量
零件制造:使用原材料量
零件存储:存储量
材料存放:存放量
10.试把第7-8小题中的E-R图转换为关系模型。(下划线表示主码)
第7小题
系(系编号,系名,学校名)
班级(班级编号,班级名,系编号)
教研室(教研室编号,系编号,室名)
教员(职工号,教研室编号,姓名,职称)
学生(学号,姓名,班号,学历,导师职工号)
课程(课程号,课程名)
选课(学号,课程编号,成绩)
第8小题
产品(产品号,产品名,仓库号)
零件(零件号,零件名)
产品组成(产品号,零件号,使用零件量)
材料(材料号,材料名,类别,仓库号,存放量)
零件组成(零件号,材料号,使用材料量)
仓库(仓库号,仓库名)
零件储存(零件号,仓库号,存储量)
11.试用规范化理论中有关范式的概念分析本章习题设计的关系模型中各个关系模式的候选码,它们属于第几范式?会产生什么更新异常?
【答案】BCNF;不会产生更新异常。
第三篇 系统篇
第10章 数据库恢复技术
习题10.x 数据库恢复技术理论
1.试述事务的概念及事务的4个特性。恢复技术能保证事务的哪些特性?
(1)事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。附加:事务通常是以BEGIN TRANSACTION
开始,以COMMIT
或ROLLBACK
结束。
(2)事务的4个特性:
①原子性:事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。
②一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
③隔离性:一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
④持续性:也称永久性,指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。
(3)恢复技术能保证事务的原子性、持续性。
3.登记日志文件时为什么必须先写日志文件,后写数据库?
把对数据库的修改写到数据库中和把表示这个修改的日志写到日志文件中是两个不同的操作。有可能在这两个操作之间发生故障,即这两个写操作只完成了一个。如果先写了数据库修改,而在运行记录中没有登记这个修改,则以后就无法恢复这个修改了。如果先写日志,但没有修改数据库,按日志文件恢复时只不过是多执行一次不必要的UNDO操作,并不会影响数据库的正确性。所以一定要先写日志文件,即首先把日志记录写到日志文件中,然后写数据库的修改。
6.针对不同的故障,试给出恢复的策略和方法。(即如何进行事务故障的恢复,如何进行系统故障的恢复,以及如何进行介质故障的恢复。)
(1)事务故障的恢复:
①反向扫描日志文件,查找该事务的更新操作。
②对该事务的更新操作执行逆操作,即将日志记录中“更新前的值”写入数据库。
直至读到此事务的开始标记,事务故障恢复就完成了。
(2)系统故障的恢复:
①正向扫描日志文件(即从头扫描日志文件),找出在故障发生前已经提交的事务队列(REDO-LIST)。 同时找出故障发生时尚未完成的事务队列(UNDO-LIST)。
②对撤销队列中的各个事务进行撤销(UNDO)处理。
③对重做队列中的各个事务进行重做处理。
(3)介质故障的恢复:
①装入最新的数据库后备副本(离故障发生时刻最近的转储副本),使数据库恢复到最近一次转储时的一致性状态。
②装入相应的日志文件副本(转储结束时刻的日志文件副本)。
③启动系统恢复命令,由DBMS完成恢复功能,即重做已完成的事务。
7.什么是检查点记录?检查点记录包括哪些内容?
检查点记录是一类新的日志纪录。它的内容包括:①建立检查点时刻所有正在执行的事务清单。②这些事务的最近一个日志记录的地址。
习题10.4 系统故障恢复
【知识点】系统故障恢复时,哪些事务需要重做,哪些事务需要回滚?
【答案】需要重做故障发生前已经提交的事务,回滚故障发生时尚未完成的事务。
考虑下图所示的日志记录:
序号 | 日志 |
---|---|
1 | T1:开始 |
2 | T1:写A,A=10 |
3 | T2:开始 |
4 | T2:写B,B=9 |
5 | T1:写C,C=11 |
6 | T1:提交 |
7 | T2:写C,C=13 |
8 | T3:开始 |
9 | T3:写A,A=8 |
10 | T2:回滚 |
11 | T3:写B,B=7 |
12 | T4:开始 |
13 | T3:提交 |
14 | T4:写C,C=12 |
(1)如果系统故障发生在14之后,说明哪些事务需要重做,哪些事务需要回滚。
(2)如果系统故障发生在10之后,说明哪些事务需要重做,哪些事务需要回滚。
(3)如果系统故障发生在9之后,说明哪些事务需要重做,哪些事务需要回滚。
(4)如果系统故障发生在7之后,说明哪些事务需要重做,哪些事务需要回滚。
【答案】
系统故障发生时间 | 需要重做的事务 | 需要回滚的事务 |
---|---|---|
14之后 | T1,T3 | T2,T4 |
10之后 | T1 | T2,T3 |
9之后 | T1 | T2,T3 |
7之后 | T1 | T2 |
第11章 并发控制
习题11.x 并发控制理论
1.在数据库中为什么要并发控制?并发控制技术能保证事务的哪些特性?
(1)数据库是共享资源,通常有多个事务同时在运行。当多个事务并发地存取数据库时就会同时存取同一数据的情况。若对并发操作不加控制,就可能会存取和存储不正确的数据,破坏数据库的一致性。所以数据库管理系统必须提供并发控制机制。
(2)并发控制技术能保证事务的隔离性和一致性。
2.并发操作可能会产生哪几类数据不一致?用什么方法能避免各种不一致的情况?
(1)丢失修改:两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了(覆盖了)T1提交的结果,导致T1的修改被丢失。
(2)不可重复读:事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。
(3)读“脏”数据:事务T1修改某一数据并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时被T1修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为“脏”数据,即不正确的数据。
(4)避免方法:并发控制。并发控制的主要技术有封锁、时间戳、乐观控制法和多版本并发控制等。
3.什么是封锁?基本的封锁类型有几种?试述它们的含义。
(1)所谓封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他事务不能更新此数据对象。
(2)基本的封锁类型有2种:排他锁(简称X锁)和共享锁(S锁)。排他锁又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁为止。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。共享锁又称为读锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁为止。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
5.什么是活锁?试述活锁的产生原因和解决方法。
(1)活锁:一个事务永远等待某个数据对象上的锁释放的情形。活锁的含义是该等待事务等待时间太长,似乎被锁住了,实际上可能被激活。
(2)产生原因:一系列封锁不能按其先后顺序执行。
(3)解决方法:采用先来先服务的策略。
6.什么是死锁?请给出预防死锁的若干方法。
(1)死锁:两个或多个事务都已封锁了一些数据对象,然后又都请求对已被其他事务封锁的数据对象加锁,从而出现死等待。
(2)预防死锁通常有一次封锁法和顺序封锁法两种方法。
习题11.9 可串行化调度
设T1、T2、T3是如下的三个事务,设A的初值为0。
T1:A:=A+2;
T2:A:=A*2;
T3:A:=A**2;(即A←A2)
(1)若这三个事务允许并发执行,则有多少种可能的正确结果?请一一列举出来。
所有可能的串行执行次序为:T1T2T3、T1T3T2、T2T1T3、T2T3T1、T3T1T2、T3T2T1。它们的执行结果依次为:16、8、4、2、4、2。因为并发执行的正确结果必定与某种串行执行结果相同,所以一共有2、4、8、16这4种可能的正确结果。
(2)请给出一个可串行化的调度,并给出执行结果。
T1 | T2 | T3 |
---|---|---|
Xlock A | ||
R(A)=0 | ||
Xlock A | ||
A←A+2 | 等待 | |
W(A)=2 | 等待 | |
Commit | 等待 | |
Unlock A | 等待 | |
获得Xlock A | ||
R(A)=2 | ||
Xlock A | ||
A←A*2 | 等待 | |
W(A)=4 | 等待 | |
Commit | 等待 | |
Unlock A | 等待 | |
获得Xlock A | ||
R(A)=4 | ||
A←A**2 | ||
W(A)=16 | ||
Commit | ||
Unlock A |
习题11.14 两段锁协议
考虑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,增加加锁操作和解锁操作,并要求遵循两阶段封锁协议。
T1: Slock A; R(A); Slock B; R(B); Xlock B; B=A+B; W(B); Unlock A; Unlock B;
T2: Slock B; R(B); Slock A; R(A); Xlock A; A=A+B; W(A); Unlock B; Unlock A;
(2)说明T1和T2的执行是否会引起死锁,给出T1和T2的一个调度并说明之。
可能会引起死锁,见下。
T1 | T2 |
---|---|
Slock A | |
R(A) | |
Slock B; | |
R(B); | |
Slock B | |
等待 | Slock A; |
等待 | 等待 |