什么是范式
设计关系数据库时,遵从不同的规范要求,设计出合理的关系数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
大白话就是减少重复的内容存储,范式数越大重复的越少.就比如一首歌,在不同播放器播放,那就会下载多遍,这时候指定同一个下载目录就能有效减少存储重复
范式:
第一范式(1NF)
所有的域都应该是原子性的
就是说所有的字符取值是独一无二的
第二范式(2NF)
满足第二范式(2NF)必须先满足第一范式(1NF),消除非主属性对主码的部分函数依赖.
例如在员工表中的身份证号即可实现每个一员工的区分,该身份证号码即为候选键,任何一个候选键都可以被选作主键。在找不到候选键时,可额外增加属性以实现区分,如果在员工中,没有对其身份证号进行存储,而姓名可能会在数据库运行的某个时间重复,无法区分出实体时,设计辟如ID等不重复的编号以实现区分,被添加的编号或ID选作主键。
第三范式(3NF)
在1NF基础上,任何非主属性不依赖于其它非主属性,在2NF基础上消除传递依赖.
例如,存在一个部门信息表,其中每个部门有部门编号、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据重复。
巴斯-科德范式
在3NF基础上消除对主码子集的依赖
假设仓库管理关系表为StorehouseManage(仓库ID, 存储物品ID, 管理员ID, 数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系:
(仓库ID, 存储物品ID) →(管理员ID, 数量)
(管理员ID, 存储物品ID) → (仓库ID, 数量)
于是就出现了:
(仓库ID) → (管理员ID)
(管理员ID) → (仓库ID)
即存在关键字段决定关键字段的情况,所以其不符合BCNF范式
这时候要对这个关系表进行拆分至于拆分那就需要仁者见仁智者见智了.