1 数据库体系结构
1.1 三级模式和两级映像
内模式又称存储模式、物理模式;
外模式又称用户模式;
模式又称概念模式;
聚簇索引属于内模式的范畴。
例题1
在数据库系统中,数据库的视图、基本表和存储文件的结构分别与()对应;数据的物理独立性和数据的逻辑独立性是分别通过修改()来完成的。
A 模式、外模式、内模式
B 模式、内模式、外模式
C 外模式、模式、内模式
D 外模式、内模式、模式
A 模式与内模式之间的映像、外模式与模式之间的映像
B 外模式与内模式之间的映像、外模式与模式之间的映像
C 外模式与模式之间的映像、模式与内模式之间的映像
D 外模式与内模式之间的映像、模式与内模式之间的映像
分析:
- 数据库的视图与外模式对应,基本表与模式对应,存储文件与内模式对应,故第一空选C选项;
- 数据的物理独立性是通过修改模式与内模式之间的映像来完成的,数据的逻辑独立性是通过修改外模式与模式之间的映像来完成的,故第二空选A选项;
3.答案:C、A
例题2
在采用三级模式结构的数据库系统中,如果对数据库中的表Emp创建聚簇索引,那么改变的是数据库的() 。
A 模式
B 内模式
C 外模式
D 用户模式
分析:创建聚簇索引改变的是数据库的内模式,故选B选项。
1.2 分布式数据库
1.2.1 分布式数据库概述
分布式数据库,从逻辑上看,对外是一个整体,存在局部内模式,不存在局部外模式,存在全局外模式,不存在全局内模式。
1.2.2 分布式数据库特点
- 分布性:数据放在不同的物理节点上
- 自治性:不同物理节点,有自己的局部DBMS
- 可用性:由于多副本机制,某个节点发生故障,其它结点仍然可用
例题
某高校信息系统采用分布式数据库系统,该系统中“当某一场地故障时,系统可以使用其它场地上的副本而不至于使整个系统瘫痪”和“数据在不同场地上的存储”分别称为分布式数据库的( ) 。
A 共享性和分布性
B 自治性和分布性
C 自治性和可用性
D 可用性和分布性
分析:
共享性:不同结点上的数据,可以共享;
自治性:不同物理节点,有自己的局部DBMS;
可用性:由于多副本机制,某个节点发生故障,其它结点仍然可用;
分布性:数据放在不同的物理节点上;
综上,选D选项。
1.2.3 透明性分类
2 数据库设计
2.1 数据库设计概述
在需求分析阶段,输出的文档也有:数据流图、数据字典、需求说明书;在概念结构设计阶段,输出的文档有:ER模型;在逻辑结构设计阶段,输出的文档是关系模式。
注意:在软件工程中,ER模型是系统分析阶段数据建模的产物。
2.2 概念结构设计
-
集成的方法:
- 多个局部E-R图一次集成
- 逐步集成,用累加的方式一次集成两个局部E-R
-
集成产生的冲突及解决办法:
- 属性冲突:包括属性域冲突和属性取值冲突
- 命名冲突:包括同名异义和异名同义
- 结构冲突:包括同一对象在不同应用中具有不同的抽象,以及同一实体在不同局部E-R图中所包含的属性个数和属性排列次序不完全相同
-
两个不同实体集之间联系
- 一对一(1:1)
- 对多(1: n)
- 多对多(m: n)
2.3 逻辑结构设计
数据模型三要素:数据结构、数据操作、数据的约束条件
数据模型分类:
- 层次模型
- 网状模型
- 面向对象模型
- 关系模型
例题1
在数据库设计的需求分析、概念结构设计、逻辑结构设计和物理结构设计的四个阶段中,基本E-R图是( ) 。
A 需求分析阶段形成的文档,并作为概念结构设计阶段的设计依据
B 逻辑结构设计阶段形成的文档,并作为概念结构设计阶段的设计依据
C 概念结构设计阶段形成的文档,并作为逻辑结构设计阶段的设计依据
D 概念结构设计阶段形成的文档,并作为物理设计阶段的设计依据
分析:
E-R图是概念结构设计阶段形成的文档,并作为逻辑结构设计阶段的设计依据
故选C选项。
例题2
数据库概念结构设计阶段的工作步骤依次为( )
A 设计局部视图→抽象数据→修改重构消除冗余→合并取消冲突
B 设计局部视图→抽象数据→合并取消冲突→修改重构消除冗余
C 抽象数据→设计局部视图→合并取消冲突→修改重构消除冗余
D 抽象数据→设计局部视图→修改重构消除冗余→合并取消冲突
分析:
数据库概念结构设计阶段的工作步骤:抽象数据→设计局部视图→合并取消冲突→修改重构消除冗余
故选C选项。
3 关系代数
3.1 关系代数介绍
现在有关系S1和关系S2如下所示:
则各种关系代数情况如下:
并:
交:
差:
笛卡尔积:
投影:
投影是一元运算,在关系表中选出所需要的列,相当于SQL语句:
select Sno,Sname from S1;
选择:
选择是一元运算,在关系表中选出符合条件的记录行,相当于SQL语句:
select * from S1 where Sno = 'No0003';
自然连接:
>自然连接是等值连接,属于二元运算,不要求对象同构。
结果:属性列数是二者之和 - 重复属性列;元组:同名属性列取值相等,多个同名,要满足同时相等。
考法:
- 自然连接运算结果判断;
- 与之等价的笛卡尔积表达式判断;
- 性能判断:①同等条件下,自然联结性能优于笛卡尔积;②先做筛选,再做连接/笛卡尔积,原因:参与运算的表对象规模越小,性能越高。
3.2 典型例题
例题1
分析:
关系R与关系S自然连接后要去掉相同的属性列,故其结果集的属性列为:
R.A,R.B,R.C,R.D,R.E,S.F,S.G
即选项B正确。
例题2
分析:
- 列序号代表列名,因此1,2,3,4,5,6,7分别代表:R.A,R.B,R.C,R.D ,R.E,S.F,S.G
则第一个空为R.A,R.B,R.D ,S.F,S.G,如果属性列不同名,可以不用表名.列名形式,所以第一空选择B- 自然连接两个表中的等值列要用and连接,R中的A、B、C属性列与S中的A、B、C属性列相等,选择中的1< 6指的是R.A < S.F,故第二空为:R.A=S.A and R.B=S.B and R.C=S.C and R.A < S.F,即第二空选择C
- 答案:B、C
例题3
分析:
性能判断:①同等条件下,自然联结性能优于笛卡尔积;②先做筛选,再做连接/笛卡尔积,原因:参与运算的表对象规模越小,性能越高。
E1和E3均是先做了连接或笛卡尔积,再做筛选,所以排除E1、E3;
然后在E2、E4中选择,又E2做的是自然连接,E4做的是笛卡尔积,故排除E4
综上,正确答案为E2
4 规范化理论
4.1 规范化理论基础
设R (U,F)是属性U上的一个关系模式,X和Y是U的子集,r为R的任一关系,如果对于r中的任意两个元组u,v,只要有u[X]=v[X],就有u[Y]=v[Y],则称X函数决定Y,或称Y函数依赖于X,记为X→Y。
R(U,F):U表示属性集合;F表示函数依赖集合
X->Y说决定因素->被决定因素,如学号->系号,系号->系名
部分函数依赖
传递函数依赖
考查方式
1、公理体系:名称与描述的对应匹配
2、候选键、主属性、非主属性的判断
3、范式:规范化程度判断
4、模式分解,分解判断
4.1.1 公理体系
关系模式R<U,F>来说有以下的推理规则:
A1.自反律(Reflexivity):若Y
⊆
\subseteq
⊆ X
⊆
\subseteq
⊆ U,则X→Y成立。
A2.增广律(Augmentation):若Z
⊆
\subseteq
⊆ U且X→Y,则XZ→YZ成立。
A3.传递律(Transitivity):若X→Y且Y→Z,则X→Z成立。
根据A1,A2,A3这三条推理规则可以得到下面三条推理规则:
合并规则:由X→Y,X→Z,有X→YZ。(A2,A3)
伪传递规则:由X→Y,WY→Z,有XW→Z。(A2,A3)
分解规则:由X→Y及Z
⊆
\subseteq
⊆ Y,有X→Z。(A1,A3)
非规范化的关系模式,可能存在的问题包括:数据冗余、更新异常(修改操作一致性问题)、插入异常、删除异常。
例题
设关系模式R (U,F),其中u为属性集,F是U上的一组函数依赖,那么函数依赖的公理系统(Armstrong公理系统)中的合并规则是指()为F所蕴涵。
A 若A→B,B→C,则A→C
B 若Y
⊆
\subseteq
⊆ X
⊆
\subseteq
⊆ U,则X→Y
C 若A→B,A→C,则A→BC
D 若A→B,C
⊆
\subseteq
⊆B,则A→C
分析:
增广律:两侧同时增加一个属性
传递律:传递推导
合并规则:同一个左侧,右侧可以合并一个集合
分解规则:能够推导出一个结合的前提下,可以推导集合中的一个部分若A→B,B→C,则A→C =》传递律
若Y ⊆ \subseteq ⊆ X ⊆ \subseteq ⊆ U,则X→Y =》自反律
若A→B,A→C,则A→BC =》 合并规则
若A→B,C ⊆ \subseteq ⊆B,则A→C =》分解规则
故答案选C
4.1.2 候选键、主属性、非主属性的判断
解题思路:
- 将关系模式的函数依赖关系用“有向图”的方式表示
- 找入度为0的属性,并以该属性集合为起点,尝试遍历有向图,若能正常遍历图中所有结点,则该属性集即为关系模式的候选键
- 若入度为0的属性集不能遍历图中所有结点,则需要尝试性地将一些中间结点(既有入度,也有出度的结点)并入入度为0的属性集中,直至该集合能遍历所有结点,集合为候选键
例题1
例1∶给定关系R (A1,A2,A3,A4)上的函数依赖集F={A1→A2,A3→A2,A2→A3,
A2→A4},R的候选关键字为____
A. A1
B. A1A3
C. A1A3A4
D. A1A2A3
解题思路:
候选键集合:从集合出发,能够找出关系模式中所有属性
- 入度为0的属性集合;
- 尝试遍历全图;
- 若无法遍历,则添加中间结点
解题过程:
入读为0的只有A1,从A1根据函数依赖集可以达到全部节点,故R的候选键为A1
答案:选项A
例题2
关系模式P(A,B,C,D,E,F,G,H,l,J)满足下列函数依赖:FD={ABD→E,AB→G,B→F,C→J,CJ→I,G→H},求候选码?
解题思路:
首先去掉函数依赖FD中所有->右侧的元素,因为入度不为0,即去掉E、G、F、J、I、H,剩余A、B、C、D四个元素;
尝试使用A、B、C、D任意一个均无法遍历全图;若使用ABCD做一个整体则可以遍历全图;
故ABCD为候选键
例题3
关系R (A,B,C)满足下列函数依赖:F{B→C,B→A,A→BC} ,关系R的候选关键字为()。
解题过程:
首先,我们分析每个函数依赖:
B→C:B决定C。
B→A:B决定A。
A→BC:A决定B和C。
从这些函数依赖中,我们可以推导出以下闭包:
B的闭包:B+ = {B, A, C},因为B决定A和C。
A的闭包:A+ = {A, B, C},因为A决定B和C。
由于B和A的闭包都包含了所有属性(A, B, C),这意味着B和A都可以单独作为候选关键字。
答案:候选关键字:A,B
例题4
给定关系模式R (U,F),U={A,B,C,D},F={AB→C,CD→B}。关系R ( ) ,且分别有( ) 。
A 只有1个候选关键字ACB
B 只有1个候选关键字BCD
C 有2个候选关键字ACD和ABD
D 有2个候选关键字ACB和BCD
A 0个非主属性和4个主属性
B 1个非主属性和3个主属性
C 2个非主属性和2个主属性
D 3个非主属性和1个主属性
解题过程:
- 入度为0的集合:{A,D};
- 尝试遍历全图:无法遍历全图;
- 加入中间结点:{B,C}
- 得到候选关键字:ACD和ABD
- 主属性:候选键集合的属性,非主属性:主属性以外的其他属性
- ACD和ABD包含了A、B、C、D四个属性,故有0个非主属性和4个主属性
- 答案:选C、A。
4.2 范式
数据冗余:浪费大量的存储容量
4NF:针对的是多值函数依赖判断
考点:
- 各个范式的判断;
- 1NF、2NF、3NF,不满足怎么拆解
4.2.1 第一范式
第一范式(1NF)︰在关系模式R中,当且仅当所有域只包含原子值,即每个属性都是不可再分的数据项,则称关系模式R是第一范式。
简单属性和复合属性、单值属性和多值属性、NULL属性、派生属性
- 复合属性:例如,地址:省市区
- 多值属性:1个字段可以对应多个数值
- 派生属性:计算可以得出的属性,如根据出生年份,可以得出年龄,根据单价数量,可以得出销售额
例题
例如:关系模式R(系名称,高级职称人数)是否满足1NF,如果不满足,应如何调整?
分析:
不满足,高级职工人数还可以再次拆分,不满足原子性。可以将高级职工人数拆分成副教授人数和教授人数。
4.2.2 第二范式
第二范式(2NF) :当且仅当实体E是第一范式(1NF) ,且每一个非主属性完全依赖主键(不存在部分依赖)时,则称实体E是第二范式。
思考题
请思考该关系模式会存在哪些问题(从数据冗余、更新异常、插入异常、删除异常这几个方面来考虑),解决方案是什么?
以上,属性集合U={学号,课程号,成绩,学分},函数依赖集合F={课程号->学分,(学号,课程号)->成绩}。
分析
- 所有属性不可再分——>满足第一范式;
- 候选键:
入度为0的属性集合:(学号,课程号)- 主属性:{学号,课程号}
非主属性:{成绩,学分}- 是否存在非主属性{成绩,学分}对候选键(学号,课程号)的部分函数依赖
存在非主属性学分只依赖候选键课程号,即存在部分函数依赖- 因为存在部分函数依赖,不满足2NF
- 优化:将(课程号,学分)单独做一个表记录下来,原本的(学号,课程号,成绩)要保留
拆解后,学分完全依赖于课程号,学号,课程号作为候选键,完成决定成绩,符号2NF。
思考:如果候选键是单个属性,能否满足2NF?
在1NF的前提下,至少满足2NF;
4.2.3 第三范式
第三范式(3NF) :当且仅当实体E是第二范式(2NF),且E中没有非主属性传递依赖于码时,则称实体E是第三范式。
思考题
思考题:请思考该关系模式会存在哪些问题(从数据冗余、更新异常、插入异常、删除异常这几个方面来考虑),解决方案是什么?
以上,属性集合U={学号,姓名,系号,系名,系位置},函数依赖集合F={学号->姓名,学号->系号,系号->系名,系号->系位置}
分析:
- 所有属性不可再分——>满足第一范式;
- 候选键:
入度为0的属性集合:学号- 主属性:{学号}
非主属性:{姓名,系号,系名,系位置}- 候选键已经是单属性,不存在部分函数依赖问题,因此至少满足2NF
- 非主属性系名、系位置通过非主属性系号传递依赖于学号,所以不满足3NF
- 优化
拆分成两个关系模式{系号,系名,系位置}和{学号,姓名,系号},拆分之后,系号决定系名、系位置,学号决定姓名、系号,满足3NF。
快速判断:如果一个关系模式,没有主属性,1NF前提下,至少满足3NF
4.2.4 BC范式
BC范式(BCNF):设R是一个关系模式,F是它的依赖集,R属于BCNF当且仅当其F中每个依赖的决定因素必定包含R的某个候选码。
例题
关系模式STJ (S,T,J)中,S表示学生,T表示老师,J表示课程。每一老师只教一门课程。每门课程有若干老师,某一学生选定某门课,就对应一个固定老师。
以上,属性集合U={S、T、J},函数依赖集合F={T-> J,SJ-> T}
分析:
- 所有属性不可再分——>满足第一范式;
- 候选键:
入度为0的属性集合:S
从S无法遍历全图,需要加入中间结点T或J
得到两个候选键ST和SJ- 主属性:ST、SJ
非主属性:没有非主属性- 没有非主属性,因此符合1NF、2NF、3NF
- BC范式判定依据:定义
每一个函数依赖,左侧决定因素必须包含候选码
两个函数依赖:T-> J,SJ-> T
决定因素:T、SJ
是否包含候选码:SJ包含候选码SJ,T则不包含候选码,因此不符合BC范式
例题
给定关系模式R (U,F),其中:属性集U={A1,A2,A3,A4,A5,A6},函数依赖集F={A1→A2,A1→A3,A3→A4,A1A5→A6}。关系模式R的候选码为(),由于R存在非主属性对码的部分函数依赖,所以R属于( ) 。
A A1A3
B A1A4
C A1A5
D A1A6
A 1NF
B 2NF
C 3NF
D BCNF
分析:
- 候选键:
入度为0的属性集合:A1A5- 非主属性A2依赖与主属性A1,因此不满足2NF
- 答案:R候选码为A1A5;R属于1NF。
4.2.5 范式判断思路
- 所有属性不可再分——>满足第一范式;
- 找候选键
- 找主属性和非主属性
- 非主属性对候选键是否存在传递函数依赖、部分函数依赖
- BC范式通过定义进行判断
4.3 模式分解
4.3.1 保持函数依赖分解
设数据库模式p={R1,R2,…,Rk}是关系模式R的一个分解,F是R上的函数依赖集,p中每个模式Ri上的FD集是Fi。如果{F1,F2,…,Fk}与F是等价的(即相互逻辑蕴涵),那么称分解p保持FD。
例1:
有关系模式R(A,B,C) ,F= {A→B,B→C},将其拆分为:R1 (A,B) ,R2 (B,C),是否保持函数依赖。
分析:
- A -> B的函数依赖在R1(A,B)中保留,B->C的函数依赖在R2(B,C)中保留;
- 集合F中所有函数依赖都保留了,因此就说保持函数依赖;
- 答案:保持了函数依赖。
例2:
有关系模式R (A,B,C) ,F= {A→B,B→C,A→C},将其拆分为︰R1 (A,B) ,R2 (B,C),是否保持函数依赖。
分析:
- R1(A,B)的函数依赖集合:F1={A->B},R2(B,C)的函数依赖集合:F2={B->C},则F1∪F2={A->B,B->C},根据传递律可以得到函数依赖A->C,此时称这种可推导出的,是冗余的函数依赖;
- 在分析是否保持函数依赖时,不考虑冗余函数依赖,因此集合F中的所有函数依赖都保留了;
- 答案:保持了函数依赖。
例3:
有关系模式R (A,B,C) ,F= {A→B,B→C,A→C},将其拆分为:R1 (A,B) , R2 (A,C),是否保持函数依赖。
分析:
- R1(A,B)的函数依赖集合:F1={A->B},R2(B,C)的函数依赖集合:F2={A->C},F1∪F2={A->B,A->C},无法得到B->C的函数依赖,因此没有保持函数依赖
- 答案:没有保持函数依赖。
例4∶
有关系模式R(A,B,C,D,E) ,F={A→B,D→E},将其拆分为:R1(A,B,C) ,R2 (D,E),是否保持函数依赖。
分析:
- R1(A,B,C)的函数依赖集合中包含A->B,R2(D,E)的函数依赖集合中包含D->E,因此保持了函数依赖;
- 但在拆分成R1、R2后,无法再合成R,除了保持函数依赖以外,还要判断是否无损,本题关系模式拆分是有损的关系模式拆分;
- 答案:保持了函数依赖。
4.3.2 无损分解
什么是有损,什么又是无损?
有损:不能还原。无损:可以还原。
无损联接分解:指将一个关系模式分解成若干个关系模式后,通过自然联接和投影等运算仍能还原到原来的关系模式
定理:如果R的分解为p={R1,R2},F为R所满足的函数依赖集合,分解p具有无损联接性的充分必要条件是:
R1∩R2→(R1-R2)或R1∩R2→( R2-R1)
其中,R∩R,表示模式的交,为R1与R2中公共属性组成,R1-R2或R2-R1表示模式的差集,R1-R2表示R1中去除R1和R2的公共属性所组成。当模式R分解成两个关系模式R1和R2时,如果R1与R2的公共属性能函数决定R1中或R2中的其它属性,这样的分解就具有无损联接性。
- 公式法:适用于分解后有2个关系模式的情况;
- 交集-> 差集。
例1:
设R=ABC,F={A→B},则分解p1={R1(AB),R2(AC)}与分解p2={R1(AB) ,R2(BC)}是否都为无损分解?
分析:
- R1∩R2=A,R1-R2=B,R2-R1=C;
- 看看函数依赖集合F中有没有A→B或A→C,可以看到存在A->B,因此为无损分解;
3.R1∩R2=B,R1-R2=A,R2-R1=C;- 看看函数依赖集合F中有没有B→A或B→C,并没有看到,因此为有损分解。
例2:
给出关系R (U,F) ,U={A,B,C,D,E},F={A→BC,B→D,D→E}。以下关于F说法正确的是()。若将关系R分解为p= {R1 (U1,F1), R2 (U2,F2) },其中:U1={A,B,C}、U2={B,D,E},则分解p ( ) 。
A F蕴涵A→B、A→C,但F不存在传递依赖
B F蕴涵E→A、A→C,故F存在传递依赖
C F蕴涵A→D、E→A、A→C,但F不存在传递依赖
D F蕴涵A→D、A→E、B→E,故F存在传递依赖
A无损连接并保持函数依赖
B无损连接但不保持函数依赖
C有损连接并保持函数依赖
D有损连接但不保持函数依赖
分析:
- A->BC根据分解律可推导出:A->B,A->C;又B->D,根据传递律可推导出:A->D ;又D->E,根据传递律可推导出:A->E、B->E;
- 故第一空正确答案为选项D;
- U1的函数依赖集合F1={A->BC},U2的函数依赖集合F2={B->D,D->E},F1∪F2={A→BC,B→D,D→E},故保持了函数依赖;
- U1∩U2=B,U1-U2=AC,U2-U1=DE,所以B->DE,根据分解律B->D,B->E,因此是无损分解
- 故第二空正确答案为A。
- 答案:D、A。
4.3.3 考点总结
- 冗余函数依赖
- 给定分解后的关系模式
判断是否保持函数依赖
是否无损-公式法
5 数据控制
数据控制功能包括:
①安全性(security)
②完整性(integrality)
③并发控制(concurrency control)
④故障恢复(recovery from failure)
5.1 数据安全控制
安全性(security)是指保护数据库受恶意访问,即防止不合法的使用所造成的数据泄漏、更改或破坏。这样,用户只能按规定对数据进行处理,例如,划分了不同的权限,有的用户只能有读数据的权限,有的用户有修改数据的权限,用户只能在规定的权限范围内操纵数据库。
- 存取控制对用户进行授权时,遵循最小授权原则;
- 常见的视图只读不可改;
- 触发器:监听变化,随之执行某些过程;
- 存储过程:自定义函数。
例题1:
若某企业信息系统的应用人员分为三类:录入、处理和查询,那么用户权限管理的方案适合采用( )。
A 针对所有人员建立用户名并授权
B 建立用户角色并授权
C 建立每类人员的视图并授权给每个人
D 对关系进行分解,每类人员对应一组关系
分析:分组授权,选B
例题2:
将Teachers表的查询权限授予用户U1和U2,并允许该用户将此权限授予其他用户。实现此功能的SQL语句如下( ) 。
A GRANT SELECT ON TABLE Teachers TO U1,U2 WITH PUBLIC;
B GRANT SELECT TO TABLE Teachers ON U1,U2 WITH PUBLIC;
C GRANT SELECT ON TABLE Teachers TO U1,U2 WITH GRANT OPTION;
D GRANT SELECT TO TABLE Teachers ON U1,U2 WITH GRANT OPTION;
分析:
WITH PUBLIC: 可将权限授予所有用户;
WITH GRANT OPTION:允许级联授予;
正确选项C。
例3:
数据库的安全机制中,通过提供()第三方开发人员调用进行数据更新,从而保证数据库的关系模式不被第三方所获取。
A 索引
B 视图
C 存储过程
D 触发器
分析:
索引:提高查询速度
视图:只读不可写,有安全性,但不能更新,效率没有提升
存储过程:可进行数据更新,可以隐藏表结构,以存储过程名形式进行调用
触发器:可更新,安全性不高,会关联表结构
正确选项C。
5.2 数据完整性控制
完整性(integrality)是指数据库正确性和相容性,是防止合法用户使用数据库时向数据库加入不符合语义的数据。保证数据库中数据是正确的,避免非法的更新。
- 实体完整性约束:规定基本关系的主属性不能取空值。
- 参照完整性约束:关系与关系间的引用,其他关系的主键或空值。
- 用户自定义完整性约束:应用环境决定。
- 触发器
- 主键唯一且非空;
- 外键:要么是其它关系的主键,要么为空;
- 触发器实现复杂的完整性约束。
例:
在数据库系统中,数据的并发控制是指在多用户共享的系统中,协调并发事务的执行,保证数据库的()不受破坏,避免用户得到不正确的数据。
A 安全性
B 可靠性
C 兼容性
D 完整性
分析:
安全性:防止不合法使用造成数据泄露或数据破坏;
完整性:避免非法更新,保证数据正确;
可靠性:数据出问题后可以很快恢复;
兼容性:软件兼容性、硬件兼容性。
答案:D
5.3 数据并发控制
并发控制〈concurrency control)是指在多用户共享的系统中,许多用户可能同时对同一数据进行操作。DBMS的并发控制子系统负责协调并发事务的执行,保证数据库的完整性不受破坏,避免用户得到不正确的数据。
在数据库系统中,一般将事务的执行状态分为五种。
- 活动状态:事务在执行时的状态叫活动状态
- 部分提交状态∶事务中最后一条语句被执行后的状态叫部分提交状态
- 失败状态:事务不能正常执行的状态叫失败状态
- 提交状态:事务在部分提交后,将往硬盘上写入数据,当最后一条信息写入后的状态叫提交状态,进入提交状态的事务就成功完成了
- 中止状态:事务回滚并且数据库已经恢复到事务开始执行前的状态叫中止状态
例题
在数据库系统中,一般将事务的执行状态分为五种。若“事务的最后一条语句自动执行后”,事务处于()状态。
A 活动
B 部分提交
C 提交
D 失败
分析:
活动状态:事务在执行时的状态叫活动状态;
部分提交状态∶事务中最后一条语句被执行后的状态
提交状态:COMMIT
失败状态:事务不能正常执行的状态叫失败状态
答案:B
5.3.1 事务四大特性
原子性(Atomicity是指事务包含的所有操作要么全部成功,要么全部失败回滚。这些操作是一个整体,不能部分地完成
一致性(Consistency)是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态
隔离性(lsolation)是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的
持久性(Durability,永久性)是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,无论发生何种故障,都不应对其有任何影响
5.3.2 并发产生的问题
- 丢失更新
- 不可重复读
- 读脏数据
解决方案:封锁协议
例题
若事务T1对数据D1已加排它锁,事务T2对数据D2已加共享锁,那么()。
A事务T1对数据D2加共享锁成功,加排它锁失败;事务T2对数据D1加共享锁成功、加排它锁失败
B事务T1对数据D2加排它锁和共享锁都失败;事务T2对数据D1加共享锁成功、加排它锁失败
C事务T1对数据D2加共享锁失败,加排它锁成功;事务T2对数据D1加共享锁成功、加排它锁失败
D事务T1对数据D2加共享锁成功,加排它锁失败;事务T2对数据D1加共享锁和排它锁都失败
分析:
- 针对读锁(共享锁):读读共享,读写排斥;
针对写锁(排它锁):写写排斥,读写排斥。- 事务T1对D1已加排它锁,就不能再加其它锁了,因此事务T2对数据D1加共享锁和排它锁都失败;
事务T2对数据D2已加共享锁,其它事务还可以对D2加共享锁,但不能对D2加排它锁,因此事务T1对数据D2加共享锁成功,加排它锁失败- 答案:D
5.4 故障恢复
故障恢复(recovery from failure)。数据库中的4类故障是事务内部故障、系统故障、介质故障及计算机病毒。故障恢复主要是指恢复数据库本身,即在故障引起数据库当前状态不一致后,将数据库恢复到某个正确状态或一致状态。恢复的原理非常简单,就是要建立冗余(redundancy)数据。
-
冷备份也称为静态备份,是将数据库正常关闭,在停止状态下,将数据库的文件全部备份(复制)下来。
-
热备份也称为动态备份,是利用备份软件,在数据库正常运行的状态下,将数据库中的数据文件备份出来。
-
备份策略示例:
-
数据需要恢复:先找最近的全备,然后找最近的差备,最后找差备之后的所有增备。
-
日志文件∶事务日志是针对数据库改变所做的记录,它可以记录针对数据库的任何操作,并将记录结果保存在独立的文件中
-
故障分类:
-
撤销事务(UNDO):故障发生时未完成的事务,放入Undo撤销
-
重做事务(REDO):故障发生前已提交的事务,放入Redo重做
故障恢复机制:
- 按备份恢复;
- 反向扫描日志:COMMIT 重做REDO;没有COMMIT,撤销 UNDO。
5.5 分布式事务管理
- 分布式事务的特性
- 两阶段提交协议2PC
- 两阶段提交协议活动图
- 两阶段提交协议对故障的恢复
例题1
分布式数据库系统中的两阶段提交协议(Two Phase Commit Protocol,2PC协议)包含协调者和参与者,通常有如下操作指令。满足2PC的正常序列是()
①协调者向参与者发prepare消息;②参与者向协调者发回ready消息
③参与者向协调者发回abort消息;④协调者向参与者发commit消息
⑤协调者向参与者发rollback消息
A ①②④
B ①②⑤
C ②③④
D ②③⑤
分析:
如果是正常提交序列为:①②④;
如果是异常回滚序列为:①③⑤;
答案:选A
例题2
分布式事务的执行可能会涉及多个站点上的数据操作,在两阶段提交协议中,当事务Ti的所有读写操作执行结束后,事务Ti的发起者协调器Ci向所有参与Ti的执行站点发送< prepare Ti>的消息,当收到所有执行站点返回的< ready Ti>消息后,Ci再向所有执行站点发送< commit Ti>消息。若参与事务Ti执行的某个站点故障恢复后日志中有< ready Ti>记录,而没有< commit Ti>记录,则( )。
A 事务Ti已完成提交,该站点无需做任何操作
B 事务Ti已完成提交,该站点应做REDO操作
C 事务Ti未完成提交,该站点应做UNDO操作
D 应向协调器询问以决定Ti的最终结果
分析:
没有< commit Ti>记录说明事务没有提交,在事务没有提交的情况下,还要再询问协调者到底做不做,因此应向协调器询问以决定Ti的最终结果
正确选项:D。