Mysql三大范式

第一范式(1st NF)

第一范式主要是确保数据表中每个字段的值必须具有原子性,也就是说数据表中每个字段的值不可再次拆分最小数据单元

说人话就是:

字段属性是原子性,每一列不能再拆分

  • 反例一:某些字段的值用逗号隔开

  • 反例二:字段中存一个数组

第二范式(2st NF)

第二范式要求,在满足第一范式的基础上,还要满足数据表里的每一条数据记录,都是可唯一标识的。而且所有非主键字段,都必须完全依赖主键,不能只依赖主键的一部分。如果知道主键的所有属性的值,就可以检索到任何元组(行)的任何属性的任何值。(要求中的主键,其实可以拓展替换为候选键)。

说人话就是:

一张表就是一个独立的对象

  • 举例一:用户姓名就是依赖用户id的,用户id就可以查询到当前用户的信息

第三范式(3st NF)

第三范式是在第二范式的基础上,确保数据表中的每一个非主键字段和主键字段直接相关

也就是说,要求数据表中的所有非主键字段不能依赖于其他非主键字段。

  • 即,不能存在非主属性A依赖于非主属性B,非主属性B依赖于主键c的情况,即存在“A一B→C”的决定关系

通俗地讲,该规则的意思是所有非主键属性之间不能有依赖关系,必须相互独立。

小结

  • 第一范式(1NF):确保每列保持原子性数据库的每一列都是不可分割的原子数据项,不可再分的最小数据单元,而不能是集合、数组、记录等非原子数据项。

  • 第二范式(2NF):确保每列都和主键完全依赖,尤其在复合主键的情况下,非主键部分不应该依赖于部分主键。

  • 第三范式(3NF):确保每列都和主键列直接相关,而不是间接相关

反范式化

在某些情况下我们可以反范式化设计,减少查询次数,例如冗余一些名词字段,避免联合查询。