简介

三大范式是为了在设计中更好的解决数据冗余,数据有效性检查,提高存储效率考虑。提出的三大范式。但其实在工程项目中,有时候为了效率考虑,很多时候并不会按照三大范式来设计数据库。
下面我们来了解一下数据库的三大范式与反范式。

第一范式 (1NF)

每个表的每一列都要保持它的 原子性 也就是表的每一列都是不可分割的
违反第一范式的示范:

在这里插入图片描述

进行修改后:

在这里插入图片描述

第二范式 (2NF)

要在满足第一范式的基础上,每个表都要保持 唯一性 也就是表的非主键字段要完全依赖主键字段。
我们可以从上图看出表中与学生主键完全依赖的字段有,课程,和分数。
而其他的字段只是与主键有一点点的依赖关系所以我们把它分拆为两张表:

在这里插入图片描述

在这里插入图片描述

在完成了第二范式之后我们可以发现我们消除了很多的冗余数据

第三范式 (3NF)

要在满足第一和第二范式的基础上,表中不能产生传递依赖,要消除表中的
冗余性然后我们再次对表进行拆分修改

在这里插入图片描述

以上就完成了三大范式的要求

反范式

没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是: 在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,减少了查询时的关联,提高查询效率。

转载自: MySql数据库三大范式与反范式详细解说_mysql三大范式与反范式_少i年的博客-CSDN博客