数据库理论
三范式
第一范式:消除属性值可再分(非原子的);
第二范式:消除非主属性对候选键的部分依赖。
第三范式:消除非主属性对候选键的传递依赖。
BC 范式:消除主属性对候选键的部分依赖和传递依赖。
分析
假设有属性集:{A、B、C、D、E、J}
依赖集 {A->B, A->C, C->D, AJ->E}
- 候选键:
AJ
- 主属性:
A、J
- 非主属性:
B、C、D、E
AJ
是主属性,B 可以通过A
确定,存在非主属性对候选键的部分依赖
;AJ->E
这个关系拆分后,可满足第二范式
;A->C,C->D
,存在非主属性对候选键的传递依赖
;C-D
拆分后满足第三范式
;
对于 BC 范式,可以从下面图来理解
例题(答案:C、A):
多版本控制(MVCC)
读取优化策略,不使用锁,而是使用多个版本共存的思想,根据隔离级别确定使用哪个版本号。
版本号的创建规则是:
插入数据时:CREATE_VERSION
记录下当前的事务ID(事务 ID 是一个全局严格递增的数值),DELETE_VERSION
为空;
删除数据时:CREATE_VERSION
为空,DELETE_VERSION
为当前事务ID;
更新数据时:相当于“删除旧数据,插入新数据”,拷贝一份原始数据,将原始数据的 CREATE_VERSION
设为空,DELETE_VERSION
设为当前事务ID;再将拷贝后数据的 CREATE_VERSION
设为当前事务ID,DELETE_VERSION
设为空;
根据隔离级别确定使用哪个版本号:
如果隔离级别是可重复读
:总是取 CREATE_VERSION
小于当前事务ID的记录,如果还存在多个版本,逆序取最新的一个;
如果隔离级别是读已提交
:总是取最新commit了的版本;
参考资料:本地事务 | 凤凰架构 (icyfenix.cn)