在使用mysql设计表时,必须要遵循三大范式,设计关系型数据库时,遵从不同的规范和要求,设计出合理的关系型数据库,这些不同的规范和要求称为不同的范式。各种范式呈递次规范,越高的范式数据库冗余越小。

第一范式

什么是第一范式

每一列都是不可分割的原子数据项,可能会比较抽象,那么举个例子来看一下

MySQL数据库三大范式 mysql三大范式简述_第一范式


上图这个简单的表,发现学院那一列被分为了两个列,这一列是可以在分成两个列的,也就是不符合我们的第一范式,稍微修改一下,让它符合我们的第一范式。

MySQL数据库三大范式 mysql三大范式简述_第二范式_02

第一范式存在的问题
  • 数据冗余严重
  • 添加数据存在问题,比如我们想添加一个学院名称和负责人,仅添加这个信息其他部分就会空下来,显得非常突兀。
  • 数据删除存在问题,想删除一个信息,就需要删除整行。

第二范式

第二范式:属性必须完全依赖于主键。

完全依赖:针对于属性组来说,当一组属性X能推出来Y的时候就说Y完全依赖于X。

部分依赖:一组属性X中的其中一个或几个属性能推出Y就说Y部分依赖于X。

MySQL数据库三大范式 mysql三大范式简述_MySQL数据库三大范式_03


观察上表,我们发现,姓名对学号存在部分依赖,系名对学号存在部分依赖

,系主任对学号存在部分依赖,所以它是不符合第二范式的,现在来修改一下,让它符合第二范式。

MySQL数据库三大范式 mysql三大范式简述_mysql_04


表一分数完全依赖于学号和课程的属性

MySQL数据库三大范式 mysql三大范式简述_三范式_05


表二姓名、学员名称、负责人完全依赖于学号的属性

第三范式

第三范式:所有的非主属性不依赖于其他的非主属性

在表二中,主属性是学号,非主属性是姓名,学员名称,负责人,如果我们知道学员名称可以推出来负责人是谁,所以,它不符合我们的第三范式,需要进行改进。

MySQL数据库三大范式 mysql三大范式简述_mysql_06


MySQL数据库三大范式 mysql三大范式简述_第一范式_07