第5章_数据库相关
1.CAP定理
2.事务的ACID
特性
详见4
3.并发异常
详见5
4.隔离级别
5.Oracle
、MySQL
、SQL Server
的事务隔离级别
详见8
6.范式(Normal Form
)
设计范式是为了解决实际遇到的一些问题:9
- 第一范式
举例如下:
公司名称 | 公司地址 | 商品 | 公司电话 | |
名称 | 数量 |
存在二级表头,商品有名称和数量两个属性,需要拆分开来,改造如下:
公司名称 | 公司地址 | 商品名称 | 商品数量 | 公司电话 |
- 第二范式
举例如下:
课程名称 | 学号 | 学生姓名 | 学生分数 | 系名 | 系主任 |
高等数学 | 1001 | 李小明 | 95 | 经济系 | 王强 |
大学英语 | 1001 | 李小明 | 87 | 经济系 | 王强 |
普通化学 | 1001 | 李小明 | 76 | 经济系 | 王强 |
高等数学 | 1002 | 张莉莉 | 72 | 经济系 | 王强 |
大学英语 | 1002 | 张莉莉 | 98 | 经济系 | 王强 |
计算机基础 | 1002 | 张莉莉 | 88 | 经济系 | 王强 |
高等数学 | 2003 | 高芳芳 | 82 | 法律系 | 刘玲 |
法学基础 | 2003 | 高芳芳 | 82 | 法律系 | 刘玲 |
在这张表当中,我们可以看到,码
是学号、课程名称。因为可能存在重名的情况,所有学生姓名不是主属性。即通过码
,我们可以确定一条记录,即:其唯一标识一条记录。
但是我们可以看到,对于非主属性系名
、系主任
,其仅依赖于码
当中的学号,而与课程名称无关,即其部分依赖于码
。
这样的后果就是记录的不必要重复,我们可以根据依赖将其拆分为两个表:
学号 | 课程名称 | 分数 |
1001 | 李小明 | 95 |
1001 | 李小明 | 87 |
1001 | 李小明 | 76 |
1002 | 张莉莉 | 72 |
1002 | 张莉莉 | 98 |
1002 | 张莉莉 | 88 |
2003 | 高芳芳 | 82 |
2003 | 高芳芳 | 82 |
以及
学号 | 姓名 | 系名 | 系主任 |
1001 | 李小明 | 经济系 | 王强 |
1002 | 张莉莉 | 经济系 | 王强 |
2003 | 高芳芳 | 法律系 | 刘玲 |
- 第三范式
用上面的图举例:
学号 | 姓名 | 系名 | 系主任 |
1001 | 李小明 | 经济系 | 王强 |
1002 | 张莉莉 | 经济系 | 王强 |
2003 | 高芳芳 | 法律系 | 刘玲 |
我们可以看到系名和系主任是一一对应的,也就是说,我们可以认为系名依赖于系主任,系主任依赖于学号;或者说系主任依赖于系名,系名依赖于学号。总之存在非主属性对于码的传递依赖,产生了不必要的重复。
所以我们可以拆分如下:
学号 | 姓名 | 系名 |
1001 | 李小明 | 经济系 |
1002 | 张莉莉 | 经济系 |
2003 | 高芳芳 | 法律系 |
以及
系名 | 系主任 |
经济系 | 王强 |
法律系 | 刘玲 |
BC
范式
举一个新例子:
仓库名 | 管理员 | 物品名 | 数量 |
上海仓 | 张三 | A | 30 |
上海仓 | 张三 | B | 40 |
北京仓 | 李四 | A | 50 |
北京仓 | 李四 | B | 60 |
这张表的主属性有点长,包括:仓库名、管理员、物品名,其可以确定非主属性:数量
在主属性当中,我们可以看到仓库名和管理员是一一对应的,存在着主属性对于码的部分函数依赖与传递函数依赖,造成了重复。
所以我们可以拆分如下:
仓库名 | 物品名 | 数量 |
上海仓 | A | 30 |
上海仓 | B | 40 |
北京仓 | A | 50 |
北京仓 | B | 60 |
以及
仓库名 | 管理员 |
上海仓 | 张三 |
北京仓 | 李四 |
- 第四范式
举例如下:
学号 | 姓名 | 选课 |
001 | 王小明 | 数学 |
001 | 王小明 | 语文 |
我们可以看到,因为存在重名的情况,所以学号是主属性。而非主属性姓名和课程独立,但是课程存在多值。也就是说存在重复,我们可以分解为:
学号 | 选课 |
001 | 数学 |
001 | 语文 |
以及
学号 | 姓名 |
001 | 王小明 |
- 第五范式
举例如下:
课程 | 教师 | 参考书 |
英语 | Bill | 人教版英语 |
英语 | Bill | 美版英语 |
英语 | Jay | 人教版英语 |
英语 | Jay | 美版英语 |
英语 | Dave | 人教版英语 |
英语 | Dave | 美版英语 |
高数 | William | 人教版高数 |
高数 | William | 美版高数 |
这个表的大概意思是,假设学校中的某一门课程(英语),由多名教师讲授(Bill,Jay,Dave),并且使用同一套参考书(人教版英语,美版英语)
我们可以看到,这里面全是主键,全码,但存在多值依赖:
多值依赖的具体解释详见13
总之就是造成了重复,仅看课程和教师,我们发现Bill
的名字出现了2
次;而关注课程和参考书,我们发现人教版英语重复了3
次。
拆分如下:
课程 | 教师 |
英语 | Bill |
英语 | Jay |
英语 | Dave |
高数 | William |
以及
课程 | 参考书 |
英语 | 人教版英语 |
英语 | 美版英语 |
高数 | 人教版高数 |
高数 | 美版高数 |
关于前三个范式,我们可以总结为:12
7.反范式
关于反范式的其他解释详见17