说明
范式就是设计数据库的规则,好的数据库设计对数据库的存储性能和查询性能产生很大的影响
基本分类
- 第一范式
- 第二范式
- 第三范式
- 巴斯-科德范式
- 第四范式
- 第五范式(又称完美范式)
满足最低要求的范式是第一范式,在第一范式的基础上进一步满足更多规范要求的称为第二范式,其余范式以此类推,一般来说,数据库只需满足第三范式,就行了
第一范式
要求数据库表中的每一列保持原子性(不可分割),换句话说,第一范式要求数据库中的表都是二维表
反例
解决
第二范式
在满足第一范式的基础上,表中的每一个字段都完全于主键
定义:数据库的表中不存在非关键字字段对任一候选关键字段的部分依赖
特点:消除部分依赖
反例:
学生宿舍管理系统中表设计
学生宿舍管理系统中每一条记录是由学生和宿舍联合才能确认唯一,此时学生姓名和宿舍编号就作为表的关键字字段,而年龄和电话仅仅部分依赖关键字段,宿舍楼层,布局等信息也是如此,违反了第二范式
解决:
总结:
第二范式要满足第一范式
不能表中非主键字段对主键的部分依赖(使用商品与供应上信息合并的一张表,其中商品的重量字段只跟商品有关系,与供应商是没有关系的,存储部分依赖,不符合第二范式)
第三范式
第三范式是在第二范式的基础上定义的
如果数据表中不存在非关键字段对任意候选关键字段的传递依赖,则符合第三范式
换句话说就是表中不存在字段对主键的传递依赖,则符合第三范式
特点:
在第二范式的基础上消除传递依赖
反例:
说明,分类描述字段依赖于分类,然后分类又与商品信息关联,所以存在传递依赖
解决:
总结
| 范式 | 特点 | | —- | —- |
| 第一范式 | 原子性:表中每列不可再拆分 |
| 第二范式 | 在第一范式的基础上,不产生局部依赖,表中每列完全依赖于主键[消除局部依赖] |
| 第三范式 | 在第二范式的基础上,不产生传递依赖,表中和每列都是直接依赖于主键[消除传递依赖] |
