软考-3.3模式分解-事务并发-封锁协议
前言
内容:
-
模式分解
- 保持函数依赖分解
- 无损分解
-
事务并发
-
封锁协议
中论
模式分解
保持函数依赖分解
对于关系模式R,有依赖集F,若对R进行分解,分解出来的多个关系模式,保持原来的依赖集不变,则称为保持函数依赖分解。
保持函数依赖的判断:
-
如果F上的每一个函数依赖都在其分解后的某一个关系上成立,则这分解就是保持函数依赖分解。(充分条件)
看分解后的集合,每一个集合是否都能推出函数依赖集,如果都能则是保持函数依赖,反之不保持。
(注意:这个推出不包含传递依赖推导出。比如A–>B,B–>C。则分解的U={A,B},就不是保持函数依赖分解。因为A–>B,但是没有A–>C。
-
如果1不能确定是保持函数依赖分解,有方法2。略。
无损分解
分解后的关系模式能够还原出原关系模式,就是无损分解,不能还原的就是有损。
无损分解的判断:
分解为两个关系模式时
,如果R分解为p={R1,R2},F为R所满足的函数依赖集合,分解p具有无损连接性的充分必要条件是R1∩R2-->(R1-R2)或者R1∩R2-->(R2-R1)
。分解为三个或三个以上关系模式时
,表格法。- 构建初始表。行为每个分解的表,列为分解后的列取并集
- 首先根据分解后的表,在对应格子打钩
- 然后根据函数依赖打钩
- 最后只要有一列全是钩,则是无损分解
并发控制
事务
- 原子性:要么全做,要么不做
- 隔离性:任一事务的更新操作直到成功提交之前对其他事务不可见
- 一致性:事务发生后数据一致
- 持续性:事务操作结果是持续的
并发控制的问题
- 丢失更新
- 不可重复读
- 读脏数据
封锁协议
- X锁是排他锁(写锁)。某事务对数据A加此锁,其他事务都不可对A加任何锁。
- S锁是共享锁(读锁)。某事务对数据A加此锁,其他事务只可以对A加S锁。
一级封锁协议
在事务修改数据A之前先对其加X锁,直到事务结束释放。可解决丢失更新问题。
二级封锁协议
在一级封锁协议的基础上,事务在读数据R之前必须先对其加S锁,读完后即可释放S锁。可解决读脏数据、丢失更新的问题。
三级封锁协议
在一级封锁协议的基础上,事务在读取数据R之前先对其加S锁,知道事务结束才释放。可解决丢失更新、读脏数据、数据重复读的问题。
一级:侧重写的时候加X锁。
二级:在一级的基础上,侧重读的时候加S锁,读完即释放。
三级:在一级的基础上,侧重读的时候加S锁,事务结束释放。
后记
真的要自己争气,人一旦做出成绩来,全世界都和颜悦色。——————佚名
评论