软件设计师——数据库

软件设计师备考笔记

上午题 下午题
计算机网络概述 数据流图设计(下午试题一)
程序设计语言基础知识 数据库设计(下午试题二)
标准化和知识产权 UML分析与设计(下午试题三)
数据库 面向对象程序设计与实现(下午试题六)
操作系统 算法设计与C语言实现(下午试题四)
结构化开发与方法
软件工程
网络与信息安全
数据结构
算法分析设计

1 基本概念

1.1 数据库与数据库管理系统

  • 数据库系统(DBS):从广义上讲是由数据库、硬件、软件和人员组成的,其中管理的对象是数据
    • 数据库(DB):是指长期存储在计算机内的、有组织的、可共享的数据集合
    • 硬件:是指构成计算机系统的各种物理设备,包括存储数据所需的外部设备
    • 软件:包括操作系统、数据库管理系统及应用程序
    • 人员:
      • 系统分析员和数据库设计人员
      • 应用程序员
      • 最终用户
      • 数据库管理员(DBA)

1.2 DBMS 的功能

  • 数据定义
  • 数据库操作
  • 数据库运行管理
  • 数据组织、存储和管理
  • 数据库的建立和维护
  • 其他功能:如DBMS在网络中与其他软件系统的通信功能,一个DBMS 与另一个DBMS或文件系统的数据转换功能等

1.3 DBMS 的特征与分类

  • DBMS 的特征:
    • 数据结构化且统一管理
    • 有较高的数据独立性
    • 数据控制功能
  • DBMS 的分类:
    • 关系数据库系统(RDBS)
    • 面向对象的数据库系统(OOBS)
    • 对象关系数据库系统(ORDBS)

1.4 数据库的三级模式结构

1.4.1 模式结构

数据库系统采用三级模式结构,这是数据库管理系统内部的系统结构

  • 概念模式。也称模式,是数据库中全体数据的逻辑结构和特征的描述,它由若干个概念记录类型组成,只涉及行的描述,不涉及具体的值
  • 外模式。也称用户模式或子模式,是用户与数据库系统的接口,是用户用到的那部分数据的描述,由若干个外部记录类型组成
  • 内模式。也称存储模式,是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式,定义所有的内部记录类型、索引和文件的组织方式以及数据控制方面的细节
    软件设计师——数据库_第1张图片

1.4.2 两级映像

数据库系统在三级模式之间提供了两级映像,即模式/内模式映像和外模式/模式映像

  • 模式/内模式映像。该映像存在于概念级和内部级之间,实现了概念模式到内模式之间的相互转换。(物理独立性
  • 外模式/模式映像。该映像存在于外部级和概念级之间,实现了外模式到概念模式之间的相互转换。(逻辑独立性

2 数据模型

2.1 数据模型的基本概念

  • 概念数据模型。也称信息模型,是按用户的观点对数据和信息建模,是现实世界到信息世界的第一层抽象,强调其语义表达功能,易于用户理解,是用户和数据库设计人员交流的语言,主要用于数据库设计。这类模型中最著名的是实体联系模型,简称E-R模型
  • 基本数据模型。它是按计算机系统的观点对数据建模,是现实世界数据特征的抽象,用于DBMS的实现。基本的数据模型有层次模型、网状模型、关系模型和面向对象模型(OOM)

2.2 数据模型的三要素

数据模型是用来描述数据的一组概念和定义。数据模型的三要素数据结构、数据操作、数据的约束条件

  • 数据结构:是所研究的对象类型的集合,是对系统静态特性的描述。
  • 数据操作:是对数据库中各种对象(型)的实例(值)允许执行的操作集合,包括操作及操作规则。数据操作是对系统动态特性的描述。
  • 数据的约束条件:是一组完整性规则的集合。也就是说,对于具体的应用数据必须遵循特定的语义约束条件,以保证数据的正确、有效、相容。

2.3 E-R 模型

实体-联系模型简称E-R模型,所采用的3个主要概念是实体、联系和属性。E-R模型是软件工程设计中的一个重要方法,因为它接近于人的思维方式,容易理解并且与计算机无关,所以用户容易接受。一般遇到实际问题,应先设计一个E-R模型,然后再把它转换成计算机能接受的数据模型

  • 实体:是现实世界中可以区别于其他对象的“事件”或“物体”。每个实体由一组特性(属性)来表示,其中的某一部分属性可以唯一表示实体。实体集是具有相同属性的实体集合
  • 联系实体集之间的对应关系称为联系。实体的联系分为实体内部的联系和实体与实体之间的联系。实体集内部的联系反映数据在同一记录内部各字段间的联系。而实体集之间的联系类型有:
    • 一对一联系:如果对于实体集A中的每一个实体,实体集B中至多有一个实体与之联系;反之亦然,则称实体集A与实体集B具有一对一联系。记为1∶1
    • 一对多联系:如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系;反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B有一对多联系。记为1∶n
    • 多对多联系:如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系;反之,对于实体集B中的每一个实体,实体集A中也有m个实体(m≥0)与之联系,则称实体集A与实体集B具有多对多联系。记为m : n
  • 属性:是实体某方面的特性。在同一实体集中,每个实体的属性及其域是相同的,但可能取不同的值。E-R模型中的属性有以下分类:
    • 简单属性和复合属性
      • 简单属性是原子的、不可再分的
      • 复合属性可以细分为更小的部分(即划分为别的属性)
    • 单值属性和多值属性
      • 若定义的属性对于一个特定的实体只有一个值,这样的属性叫做单值属性
      • 若定义的属性对应一组值,则称为多值属性
    • NULL属性:当实体在某个属性上没有值或属性值未知时,使用NULL值,表示无意义或不知道
    • 派生属性:可以从其他属性得来
  • E-R 方法:概念模型中最常用的方法是实体-模型方法,简称E-R方法。该方法直接从现实世界中抽象出实体和实体间的联系,然后用非常直观的E-R图来表示数据模型。在E-R图中主要构件如下:
    软件设计师——数据库_第2张图片
  • 扩充的 E-R 模型:扩充的E-R模型包括弱实体、特殊化、概括、聚集等概念

3 关系代数

3.1关系数据库的基本概念

  • 属性和域:在现实世界中,要描述一个事物,常常取其若干特征来表示。这些特征称为属性。每个属性取值范围的集合,称为该属性的域。一般在关系数据库模型中,对域还加了一个限制,所有的域都应是原子数据的集合。关系数据模型的这种限制称为第一范式(1NF)条件。如果关系数据模型突破了1NF的限制,则称为非1NF的。
  • 笛卡儿积和关系
    软件设计师——数据库_第3张图片
    • 一个关系可以用二维表来表示。关系中属性个数称为元数,元组的个数称为基数
  • 关系的相关名词:
    • 目或度:常用R表示关系的名字,n表示关系的目或度
    • 候选码:若关系中的某一属性或属性组的值能唯一标识一个元组,则称该属性或属性组为候选码
    • 主码:若一个关系有多个候选码,则选定其中一个为主码
    • 主属性:所有候选码都是主属性,其他都是非主属性
    • 外码:如果关系模式R中的属性或属性组非该关系的码,但它是其他关系的码,那么该属性集对关系模式R而言是外码
    • 全码:关系模式的所有属性组是这个关系模式的候选码,称为全码
  • 关系的三种类型:
    • 基本关系(通常又称为基本表、基表):这是实际存在的表,它是实际存储数据的逻辑表示
    • 查询表:查询结果对应的表
    • 视图表:这是由基本表或其他视图表导出的表。由于它本身不独立存储在数据库中,数据库中只存放它的定义,所以常称为虚表
  • 关系数据库模式
    软件设计师——数据库_第4张图片
  • 完整性约束
    • 实体完整性:规定基本关系R的主属性A不能取空值
    • 参照完整性:参照完整性规定,若F是基本关系R的外码,它与基本关系S的主码相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值),或者等于S中某个元组的主码值
    • 用户自定义完整性:就是针对某一具体的关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求,由应用的环境决定
  • 关系运算
    软件设计师——数据库_第5张图片

3.2 5种基本的关系代数运算

  • 并:关系R与S具有相同的关系模式,即R与S的元数相同(结构相同)。关系R和关系S的并由属于R属于S的元组构成的集合组成,记作 R U S = {t | t ∈ \in R ∨ \vee t ∈ \in S},式中,t为元组变量

  • 差:关系R与S具有相同的关系模式。关系R与S的差由属于R不属于S的元组构成的集合组成,记作 R - S = {t | t ∈ \in R ∧ \wedge t ∉ \notin /S},式中,t为元组变量

  • 广义笛卡尔积:两个元数分别为n目和m目的关系R和S的广义笛卡儿积是一个 n+m 列的元组的集合。元组的前 n 列是关系R的一个元组,后 m 列是关系S的一个元组。若R有k1个元组,S有k2个元组,则关系R和S的广义笛卡儿积有 k1 x k2 个元组。记作 R X S = {t | t =< tn,tm > tn ∧ \wedge tn ∈ \in R ∧ \wedge tm ∈ \in S}

  • 投影:从关系的垂直方向进行运算,在关系R中选择出若干属性列A组成新的关系。记作 ∏ \prod A(R)= {t[A] t ∈ \in R}

  • 选择:从关系的水平方向进行运算,是从关系R中选择满足给定条件的诸元素,记作 σ \sigma σF(R)= {t | t ∈ \in R ∧ \wedge F(t) = true },式中,F中的运算对象是属性名(或列的序号)或常数,运算符是算术比较符和逻辑运算符
    软件设计师——数据库_第6张图片

3.3 扩展的关系代数运算


  • 在这里插入图片描述

  • 连接
    软件设计师——数据库_第7张图片


  • 软件设计师——数据库_第8张图片
    软件设计师——数据库_第9张图片

  • 广义投影:允许在投影列表中使用算术运算,实现了对投影运算的扩充
    在这里插入图片描述

  • 外连接:外连接运算是连接运算的扩展,可以处理缺失的信息。外连接运算有3种,即左外连接、右外连接和全外连接

    • 左外连接:取出左侧关系中所有与右侧关系中任一元组都不匹配的元组,用空值NULL来填充所有来自右侧关系的属性,构成新的元组,将其加入自然连接的结果中
    • 右外连接:取出右侧关系中所有与左侧关系中任一元组都不匹配的元组,用空值NULL来填充所有来自左侧关系的属性,构成新的元组,将其加入自然连接的结果中
    • 全外连接:完成左外连接和右外连接的操作。即填充左侧关系中所有与右侧关系中任一元组都不匹配的元组,填充右侧关系中所有与左侧关系中任一元组都不匹配的元组,将产生的新元组加入自然连接的结果中

4 关系数据库SQL 简介

4.1 SQL 数据库体系结构

  • SQL 的特点
    • 综合统一
    • 高度非过程化
    • 面向集合的操作方式
    • 两种使用方式
      • 用户可以在终端键盘上输入SQL命令,对数据库进行操作,故称之为自含式语言
      • 将SQL嵌入到高级语言程序中,所以又是嵌入式语言
    • 语言简洁,易学易用
  • SQL支持三级模式结构:
    • 视图对应外模式
    • 基本表对应模式
    • 存储文件对应内模式

4.2 SQL 的基本组成

  • 数据定义语言(DDL):SQL DDL提供定义关系模式和视图、删除关系和视图、修改关系模式的命令
  • 交互式数据操纵语言(DML):SQL DML提供查询、插入、删除和修改的命令
  • 事务控制:SQL提供的定义事务开始和结束的命令
  • 嵌入式SQL和动态SQL:用于嵌入到某种通用的高级语言(C、C++、Java、PL/I、Cobol、VB等)中混合编程。其中SQL负责操纵数据库,高级语言负责控制程序流程
  • 完整性:SQL DDL包括定义数据库中的数据必须满足的完整性约束条件的命令,对于破坏完整性约束条件的更新将被禁止
  • 权限管理:SQL DDL中包括说明对关系和视图的访问权限的命令

4.3 SQL 数据定义

4.3.1 创建表

	CREATE TABLE <表名>(<列名><数据类型>[列级完整性约束条件]
					 [,<列名><数据类型>[列级完整性约束条件]]...
					 [,<表级完整性约束条件>]);
  • 列级完整性约束条件NULLUNIQUE,如NOT NULL UNIQUE表示取值唯一,不能取空值

4.3.2 修改表和删除表

  • 修改表
	ALTER TABLE <表名>[ADD<新列名><数据类型>[列级完整性约束条件]]
		[DROP <完整性约束名>]
		[MODIFY <列名><数据类型>];
  • 删除表
	DROP TABLE <表名>

4.3.3 定义和删除索引

  • 建立索引
	CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
	ON <表名>(<列名>[<次序>][,<列名>[<次序>]]...);
  • <次序>:可选升序(ASC)降序(DSC),默认值为ASC

  • UNIQUE:表明此索引的每一个索引值只对应唯一的数据记录

  • CLUSTER:表示要建立的索引是聚集索引,意为索引项的顺序与表中记录的物理顺序一致。

  • 删除索引

	DROP INDEX <索引名>;

4.3.4 视图创建和删除

视图是从一个或多个表或视图中导出的表,其结构和数据是建立在对表的查询基础上的。视图不是真实存在的基础表而是一个虚拟表,视图所对应的数据并不实际地以视图结构存储在数据库中,而是存储在视图所引用的表中

  • 视图的创建
	CREATE VIEW 视图名 (列表名)
	AS SELECT 查询子句
	 [WITH CHECK OPTION];
  • 子查询可以是任意复杂的 SELECT 语句,但通常不允许含有 ORDER BY 子句和 DISTINCT 短语
  • WITH CHECK OPTION 表示对 UPDATE、INSERT、DELETE 操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)
  • 组成视图的属性列名或者全部省略或者全部指定。如果省略属性列名,则隐含该视图由 SELECT 子查询目标列的主属性组成
  • 视图的删除
	DROP VIEW 视图名;

4.4 SQL 数据查询

4.4.1 SELECT 基本结构

	SELECT [ALL|DISTINCT]<目标列表达式>[,<目标列表达式> ]...
	FROM<表名或视图名>[,<表名或视图名>]
	[WHERE<条件表达式>]
	[GROUP BY <列名1>[HAVING<条件表达式>]]
	[ORDER BY <列名2>[ASC|DESC]];
  • SQL查询中的子句顺序:SELECT、FROM、WHERE、GROUP BY、HAVING和ORDERBY
  • SELECT、FROM是必需的
  • HAVING 子句只能与 GROUP BY 搭配使用

4.4.2 简单查询与连接查询

  • 简单查询:简单查询只需要使用3个保留字,即SELECT、FROM和WHERE
  • 连接查询:若查询涉及两个以上的表,则称为连接查询

4.4.3 子查询与聚集查询

  • 子查询:子查询也称为嵌套查询,是指一个 SELECT-FROM-WHERE 查询可以嵌入另一个查询块之中。在SQL中允许多重嵌套。
  • 聚集函数:聚集函数是以一个值的集合为输入,返回单个值的函数。SQL提供了5个预定义集合函数,即平均值AVG、最小值MIN、最大值MAX、求和SUM 及 计数COUNT

4.4.4 分组查询

  • GROUP BY 子句:在WHERE子句后面加上GROUP BY子句可以对元组进行分组,保留字GROUP BY后面跟着一个分组属性列表。最简单的情况是,FROM子句后面只有一个关系,根据分组属性对其元组进行分组。SELECT子句中使用的聚集操作符仅用在每个分组上。
  • HAVING 子句:假如元组在分组前按照某种方式加上限制,使得不需要的分组为空,则在GROUP BY子句后面跟一个HAVING子句即可。当元组含有空值时,应注意以下两点:
    • 空值在任何聚集操作中都被忽略。它对求和、求平均值和计数都没有影响,也不能是某列的最大值或最小值
    • NULL 值可以在分组属性中看作一个一般的值。

4.4.5 更名运算

  • SQL提供可为关系和属性重新命名的机制,这是通过使用具有以下形式的AS子句来实现的。
	old-name As new-name
  • AS子句既可出现在SELECT子句中,也可以出现在FROM子句中

4.4.6 字符串操作

  • 对于字符串进行的最通常的操作是使用 LIKE 操作符的模式匹配。使用两个特殊的字符来描述模式,即 “%” 匹配任意字符串、“-” 匹配任意一个字符

4.4.7 视图查询

  • 查询视图表时,系统先从数据字典中取出该视图的定义,然后将定义中的查询语句和对该视图的查询语句结合起来,形成一个修正的查询语句

4.5 SQL 数据更新

4.5.1 插入

	INSERT INTO基本表名[(字段名[,字段名>]...)]
	VALUE(常量[,常量]...); 查询语句
	INSERT INTO 基本表名 (列表名)
	SELECT 查询语句

4.5.2 删除

	DELETE FROM 基本表名
		[WHERE 条件表达式]

4.5.3 修改

	UPDATE 基本表名
	SET 列名=值表达式[,列名=值表达式...]
	[WHERE条件表达式];

4.6 SQL 的访问控制

数据控制是控制用户的数据存储权利,是由DBA来决定的。DBMS 数据控制应具有以下功能:

  • 通过 GRANT 和 REVOKE 将授权通知系统,并存入数据词典
  • 当用户提出请求时,根据授权情况检查是否执行操作请求
  • SQL标准包括 DELETE、INSERT、SELECT 和 UPDATE 权限

4.6.1 授权语句

	GRANT<权限>[,<权限>]...
		[ON<对象类型><对象名>]
		To<用户>[,<用户>]...
	[WITH GRANT OPTION];
  • 不同类型的操作对象有不同的操作权限:
    软件设计师——数据库_第10张图片
  • PUBLIC:接受权限的用户可以是单个或多个具体的用户,PUBLIC 参数可将权限赋予全体用户
  • WITH GRANT OPTION:若指定了此子句,获得权限的用户还可以将权限赋予其他用户

4.6.2 收回权限语句

	REVOKE<权限>[ ,<权限>]...[ ON<对象类型><对象名>]...
	FROM<用户>[,<用户>]...,

5 关系数据库规范化

5.1 函数依赖

数据依赖是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系,是现实世界属性间相互联系和约束的抽象,是数据内在的性质,是语义的体现。函数依赖则是一种最重要、最基本的数据依赖

  • 函数依赖:设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对R(U)的任何一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数决定Y或Y函数依赖于X,记作X→Y
  • 非平凡的函数依赖:如果X→Y,但Y ⊈ \not\subseteq X,则称X→Y是非平凡的函数依赖
  • 平凡的函数依赖:如果X→Y,但Y ⊆ \subseteq X,则称X→Y是平凡的函数依赖
  • 完全函数依赖:在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X’不能决定Y,则称Y对X完全函数依赖,记作X → f \stackrel{f}{\rightarrow} fY
  • 部分函数依赖:如果X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作X → p \stackrel{p}{\rightarrow} pY。部分函数依赖也称局部函数依赖
  • 传递依赖:在R(U,F)中,如果X→Y,Y ⊈ \not\subseteq X,Y不能函数决定X,Y→Z,则称Z对X传递依赖
  • :设K为R(U, F)中的属性的组合,若K→U且对于K的任何一个真子集K',都有K'不能决定U,则K为R的候选码,若有多个候选码,则选一个作为主码。候选码通常也称为候选关键字
  • 主属性和非主属性:包含在任何一个候选码中的属性叫做主属性否则叫做非主属性
  • 外码:若R(U)中的属性或属性组X非R的码,但X是另一个关系的码,则称X为外码
  • 函数依赖的公理系统(Armstrong公理系统)。设关系模式R(U,F)中,U为属性集,F是U上的一组函数依赖,那么有以下的推理规则:
    软件设计师——数据库_第11张图片

5.2 规范化

5.2.1 1NF

  • 若关系模式R的每一个分量是不可再分的数据项,则关系模式R属于第范式(1NF)
  • 存在问题
    • 冗余度大
    • 引起修改操作的不一致性
    • 插入异常
    • 删除异常

5.2.2 2NF

  • 若关系模式R∈1NF,且每一个非主属性完全依赖于码,则关系模式R∈2NF(即当1NF消除了非主属性对码的部分函数依赖,则称为2NF

5.2.3 3NF

  • 若关系模式R(U, F)中不存在这样的码X、属性组Y及非主属性Z(Z不属于y),使得X→Y,Y→X,Y→Z成立,则称关系模式R∈3NF(即当2NF消除了非主属性对码的传递函数依赖,则称为3NF
  • 3NF的模式必是2NF的模式。产生冗余和异常的两个重要原因是部分依赖和传递依赖。因为3NF模式中不存在非主属性对码的部分依赖和传递函数依赖,所以具有较好的性能。对于非3NF的1NF、2NF,因其性能弱,一般不宜作为数据库模式,通常要将它们变换成为3NF或更高级别的范式,这种变换过程称为“关系模式的规范化处理”。

5.2.4 BCNF(巴克斯范式)

  • 若关系模式R∈1NF,若X→Y,且Y属于X,X必含有码,则关系模式RBCNF(即当3NF消除了主属性对码的部分和传递函数依赖,则称为BCNF
  • 一个满足BCNF的关系模式,应具有以下性质
    • 所有非主属性对每一个码都是完全函数依赖
    • 所有非主属性对每一个不包含它的码,也是完全函数依赖
    • 没有任何属性完全函数依赖于非码的任何一组属性

软件设计师——数据库_第12张图片

5.3 模式分解及分解应具有的特性

  • 分解:关系模式R(U,F)的一个分解是指p={R1(U1,F1),R2(U2, F2).…,Rn(Un,Fn)},其中, U = ⋃ i = 1 n U i U =\bigcup_{i=1}^{n} \Bbb{Ui} U=i=1nUi ,并且没有Ui ⊆ \subseteq Uj, 1≤i, j≤n;Fi是F在Ui上的投影,Fi={X→Y|X→Y ∈ \in F+ ∧ \wedge XY ⊆ \subseteq Ui}

  • 对一个给定的模式进行分解,使得分解后的模式是否与原来的模式等价有3种情况:

    • 分解具有无损连接性
    • 分解要保持函数依赖
    • 分解既要无损连接性,又要保持函数依赖
  • 无损连接
    在这里插入图片描述

  • 保持函数依赖
    在这里插入图片描述

6 数据库的控制功能

6.1 事务管理

事务是一个操作序列,是数据库环境中不可分割的逻辑工作单位。事务的4个特性是原子性、一致性、隔离性和持久性

  • 原子性:事务的所有操作在数据库中要么全做,要么全都不做
  • 一致性:一个事务独立执行的结果,将保持数据的一致性,即数据不会因为事务的执行而被破坏
  • 隔离性:一个事务的执行不能被其他事务干扰
  • 持久性:一个事务一旦提交,它对数据库中数据的改变必须是永久的,即便系统出现故障时也是如此

6.2 数据库的备份与恢复

6.2.1 故障类型

  • 事务内部故障:事务内部的故障有的可以通过事务程序本身发现
  • 系统故障:通常称为软故障,是指造成系统停止运行的任何事件,使得系统要重新启动
  • 介质故障:通常称为硬故障,如磁盘损坏、磁头碰撞和瞬时强磁干扰。此类故障发生的几率小,但破坏性最大
  • 计算机病毒:是一种人为的故障和破坏,是在计算机程序中插入的破坏,计算机功能或者数据可以繁殖和传播的一组计算机指令或程序代码

6.2.2 备份方法

恢复的基本原理是“建立数据冗余”(重复存储)。建立冗余数据的方法是进行数据转储登记日志文件。数据的转储分为静态转储和动态转储、海量转储和增量转储

  • 静态转储和动态转储
    • 静态转储是指在转储期间不允许对数据库进行任何存取、修改操作
    • 动态转储是指在转储期间允许对数据库进行存取、修改操作
  • 海量转储和增量转储
    • 海量转储是指每次转储全部数据
    • 增量转储是指每次只转储上次转储后更新过的数据。
  • 日志文件:在事务处理的过程中,DBMS把事务开始、事务结束以及对数据库的插入、删除和修改的每一次操作写入日志文件。一旦发生故障,DBMS的恢复子系统利用日志文件撤销事务对数据库的改变,回退到事务的初始状态。因此,DBMS 利用日志文件来进行事务故障恢复和系统故障恢复,并可协助后备副本进行介质故障恢复

6.2.3 恢复

  • 事务恢复的3个步骤
    • 反向扫描文件日志,查找该事务的更新操作
    • 对事务的更新操作执行逆操作
    • 继续反向扫描日志文件,查找该事务的其他更新操作,并做同样的处理,直到事务的开始标志

6.3 并发控制

并发操作是指在多用户共享的系统中,许多用户可能同时对同一数据进行操作。并发操作带来问题的原因是事务的并发操作破坏了事务的隔离性。DBMS的并发控制子系统负责协调并发事务的执行,保证数据库的完整性不被破坏,避免用户得到不正确的数据

  • 并发操作带来的问题:并发操作带来的数据不一致性有3类,即丢失修改不可重复读读“脏”数据

6.3.1 并发控制技术

  • 封锁:并发控制的主要技术
    • 排他锁(X锁):若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他事务都不能再对A加任何类型的锁,直到T释放A上的锁
    • 共享锁(S锁):若事务T对数据对象A加上S锁,则只允许T读取A,但不能修改A,其他事务只能再对A加S锁,直到T释放A上的S锁
  • 三级封锁协议
    • 一级封锁协议:事务在修改数据R之前必须先对其加X锁,直到事务结束才释放。一级封锁协议可以解决丢失更新问题
    • 二级封锁协议:在一级封锁协议的基础上,加上事务T在读取数据R前必须先对其加S锁,读完后即可释放S锁。二级封锁协议可以解决读“脏”数据的问题,但是由于二级封锁协议读完数据后即可释放S锁,所以它不能保证可重复读
    • 三级封锁协议:在一级封锁协议的基础上,加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。三级封锁协议可以防止丢失修改、读“脏”数据和不可重复读

你可能感兴趣的:(软件设计师,笔记,数据库)