数据库三大范式介绍|青训营笔记

180 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第二篇笔记。

什么是范式?

范式的定义是“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”。

其实通俗意义上就是一张数据表的表结构所符合的某种设计标准的级别。

数据库范式一般分为1NF,2NF,3NF,BCNF,4NF,5NF。一般来说,数据库只要满足第三范式即可。 其中有一个特点:符合高一级范式的设计,必定符合低一级范式,例如符合2NF的关系模式,必定符合1NF。

第一范式(1NF)

第一范式是指数据库表的每一列都是不可分割的基本数据线。必须保证每列的值具有原子性,不可再分割。 比如某列信息是父母姓名,其中的值为父亲和母亲的名字,这里就不符合原子性。如果要保证原子性,可以拆分为两列,分别为父亲姓名和母亲姓名。

第二范式(2NF)

第二范式是在第一范式的基础上建立起来得,满足第二范式就必须先满足第一范式,也就是每列的值具有原子性。如果表是单主键,那么主键以外的列必须完全依赖于主键;如果表是复合主键,那么主键以外的列必须完全依赖于主键,不能仅依赖主键的一部分。简单来说就是一个数据库表中只描述一件事情。

第三范式(3NF)

第三范式是在第二范式的基础上建立起来的,即满足第三范式必须要先满足第二范式。第三范式要求:表中的非主键列必须和主键直接相关而不能间接相关;也就是说:非主键的列之间不能相关依赖。第三范式消除了非主属性对于码的传递函数依赖。

反范式

一般说来,数据库只需满足第三范式就行了。没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。 具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余,达到以空间换时间的目的。

优点:

  • 可以减少表关联
  • 可以更好进行索引优化 缺点:
  • 存在大量冗余数据
  • 数据维护成本更高(删除异常,插入异常,更新异常)