数据库范式

引:设计好数据库的表的前提就是要满足更高级别数据库的范式,当然级别不是越高越好,但是至少不差!

数据库范式的优缺点

优点

  1. 减少数据冗余
  2. 消除异常(插入异常,更新异常,删除异常)

缺点

  1. 查询时要联结多个表,增加了查询的复杂度
  2. 查询时需要联结多个表,降低了数据库查询性能

什么是范式(NF Normal Form)

范式是一张数据表的表结构所符合的某种设计标准,满足高等级的范式的先决条件是满足低等级范式。

五大范式

以下范式的基本概念可以参照我的另一篇博文:关系型数据库的基础概念;具体案例可以参照这篇博文:数据库范式那些事

第一范式(1NF)

  1. 如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF
  2. 第一范式就是每一个属性都不可再分。不符合第一范式则“不能”称为关系数据库,因为你可以一张表搞定所有,而不用产生关系。

第二范式(2NF)

  1. 若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的码,则R∈2NF
  2. 表中的属性必须完全依赖于全部主键,而不是部分主键。所以只有一个主键的表如果符合第一范式,那一定是第二范式
  3. 减少数据容冗余和减少更新异常

第三范式(3NF)

  1. 若关系模式R∈2NF,并且每一个非主属性对于码都不存在传递函数依赖,则R∈3NF
  2. 消除了非主属性对于码的传递函数依赖
  3. 减少数据容冗余和减少常插入异常,更新异常,删除异常

巴斯-科德范式(BCNF)

  1. 若关系模式R∈3NF,并且每一个主属性对于码都不存在部分与传递函数依赖,则R∈BCNF
  2. 消除主属性对于码的部分与传递函数依赖,BCNF是在第三范式的基础上的一种特殊情况,既每个表中只有一个候选键。
  3. 减少插入异常,更新异常与删除异常

第四范式(4NF)

  1. 若关系模式R∈1NF,并且只允许的非平凡多值依赖是函数依赖,不允许存在其他非平凡且非函数依赖的多值依赖,则R∈4NF。
  2. 平凡的多值依赖属于第四范式
  3. 减少数据容冗余和减少常插入异常,更新异常,删除异常

总结

数据库设计应用的范式不是越高越好,要看实际情况而定。第三范式已经很大程度上减少了数据冗余,并且减少了造成插入异常,更新异常,和删除异常了。大多数情况应用到第三范式已经足够,在一定情况下第二范式也是可以的。

参考

  1. 解释一下关系数据库的第一第二第三范式
  2. 数据库范式那些事
  3. 数据库中的范式和多值依赖