数据库理论

三范式

第一范式:消除属性值可再分(非原子的);
第二范式:消除非主属性对候选键的部分依赖。
第三范式:消除非主属性对候选键的传递依赖。
BC 范式:消除主属性对候选键的部分依赖和传递依赖。

数据库理论-2021-09-09-14-08-58

分析

假设有属性集:{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 范式,可以从下面图来理解
数据库理论-2021-09-09-14-19-18

例题(答案:C、A):
数据库理论-2021-09-09-14-20-23

多版本控制(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)