引:设计好数据库的表的前提就是要满足更高级别数据库的范式,当然级别不是越高越好,但是至少不差!
数据库范式的优缺点
优点
- 减少数据冗余
- 消除异常(插入异常,更新异常,删除异常)
缺点
- 查询时要联结多个表,增加了查询的复杂度
- 查询时需要联结多个表,降低了数据库查询性能
什么是范式(NF Normal Form)
范式是一张数据表的表结构所符合的某种设计标准,满足高等级的范式的先决条件是满足低等级范式。
五大范式
以下范式的基本概念可以参照我的另一篇博文:关系型数据库的基础概念;具体案例可以参照这篇博文:数据库范式那些事
第一范式(1NF)
- 如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF
- 第一范式就是每一个属性都不可再分。不符合第一范式则“不能”称为关系数据库,因为你可以一张表搞定所有,而不用产生关系。
第二范式(2NF)
- 若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的码,则R∈2NF
- 表中的属性必须完全依赖于全部主键,而不是部分主键。所以只有一个主键的表如果符合第一范式,那一定是第二范式
- 减少数据容冗余和减少更新异常
第三范式(3NF)
- 若关系模式R∈2NF,并且每一个非主属性对于码都不存在传递函数依赖,则R∈3NF
- 消除了非主属性对于码的传递函数依赖
- 减少数据容冗余和减少常插入异常,更新异常,删除异常
巴斯-科德范式(BCNF)
- 若关系模式R∈3NF,并且每一个主属性对于码都不存在部分与传递函数依赖,则R∈BCNF
- 消除主属性对于码的部分与传递函数依赖,BCNF是在第三范式的基础上的一种特殊情况,既每个表中只有一个候选键。
- 减少插入异常,更新异常与删除异常
第四范式(4NF)
- 若关系模式R∈1NF,并且只允许的非平凡多值依赖是函数依赖,不允许存在其他非平凡且非函数依赖的多值依赖,则R∈4NF。
- 平凡的多值依赖属于第四范式
- 减少数据容冗余和减少常插入异常,更新异常,删除异常
总结
数据库设计应用的范式不是越高越好,要看实际情况而定。第三范式已经很大程度上减少了数据冗余,并且减少了造成插入异常,更新异常,和删除异常了。大多数情况应用到第三范式已经足够,在一定情况下第二范式也是可以的。