Mysql三大范式
第一范式(1st NF)
第一范式主要是确保数据表中每个字段的值
必须具有原子性
,也就是说数据表中每个字段的值
为不可再次拆分
的最小数据单元
。
说人话就是:
字段属性是原子性,每一列不能再拆分
反例一:某些字段的值用
逗号
隔开反例二:字段中存一个数组
第二范式(2st NF)
第二范式要求,在满足第一范式的基础上
,还要满足数据表里的每一条数据记录,都是可唯一标识的。而且所有非主键字段,都必须完全依赖主键,不能只依赖主键的一部分
。如果知道主键的所有属性的值,就可以检索到任何元组(行)的任何属性的任何值。(要求中的主键,其实可以拓展替换为候选键)。
说人话就是:
一张表就是一个独立的对象
举例一:
用户姓名
就是依赖用户id
的,用户id就可以查询到当前用户的信息
第三范式(3st NF)
第三范式是在第二范式的基础上
,确保数据表中的每一个非主键字段
都和主键字段直接相关
,
也就是说,要求数据表中的所有非主键字段不能依赖于其他非主键字段。
即,不能存在非主属性A依赖于非主属性B,非主属性B依赖于主键c的情况,即存在“A一B→C”的决定关系
通俗地讲,该规则的意思是所有非主键属性之间不能有依赖关系,必须相互独立。
小结
第一范式(1NF):确保每列保持原子性数据库的每一列都是不可分割的原子数据项,不可再分的最小数据单元,而不能是集合、数组、记录等非原子数据项。
第二范式(2NF):确保每列都和主键完全依赖,尤其在复合主键的情况下,非主键部分不应该依赖于部分主键。
第三范式(3NF):确保每列都和主键列直接相关,而不是间接相关
反范式化
在某些情况下我们可以反范式化设计,减少查询次数,例如冗余一些名词字段,避免联合查询。