目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。通常说来,数据库只需知足第三范式(3NF)就好了。下面用画图方式简单介绍下前三范式mysql
1NF:字段不可分;
2NF:有主键,非主键字段依赖主键;
3NF:非主键字段不能相互依赖;sql
解释:
1NF:原子性 字段不可再分,不然就不是关系数据库;
2NF:惟一性 一个表只说明一个事物;
3NF:每列都与主键有直接关系,不存在传递依赖;数据库
1NF:无重复的列,每一列都是不可分割的基本数据项,同一 列中不能有多个值,即实体中的某个属性不能有多个值或者不 能有重复的属性。除去同类型的字段,就是无重复的列
说明:第一范式(1NF)是对关系模式的基本要求,不知足第 一范式(1NF)的数据库就不是关系数据库
blog
2NF:属性彻底依赖于主键,第二范式必须先知足第一范式, 要求表中的每一个行必须能够被惟一地区分。一般为表加上一个 列,以存储各个实例的惟一标识PK,非PK的字段须要与整个 PK有直接相关性
基础
3NF:属性不依赖于其它非主属性,知足第三范式必须先知足 第二范式。第三范式要求一个数据库表中不包含已在其它表中 已包含的非主关键字信息,非PK的字段间不能有从属关系
扩展
四、BCNF(BC范式)im
它构建在第三范式的基础上,若是关系模型R是第一范式,且每一个属性都不传递依赖于R的候选键,那么称R为BCNF的模式。数据
假设仓库管理关系表(仓库号,存储物品号,管理员号,数量),知足一个管理员只在一个仓库工做;一个仓库能够存储多种物品,则存在以下关系:异常
(仓库号,存储物品号)——>(管理员号,数量)img
(管理员号,存储物品号)——>(仓库号,数量)
因此,(仓库号,存储物品号)和(管理员号,存储物品号)都是仓库管理关系表的候选码,表中惟一非关键字段为数量,它是符合第三范式的。可是,因为存在以下决定关系:
(仓库号)——>(管理员号)
(管理员号)——>(仓库号)
即存在关键字段决定关键字段的状况,所以其不符合BCNF。把仓库管理关系表分解为两个关系表仓库管理表(仓库号,管理员号)和仓库表(仓库号,存储物品号,数量),这样这个数据库表是符合BCNF的,并消除了删除异常、插入异常和更新异常。
五、4NF(第四范式)
设R是一个关系模型,D是R上的多值依赖集合。若是D中存在凡多值依赖X->Y时,X必是R的超键,那么称R是第四范式的模式。
例如,职工表(职工编号,职工孩子姓名,职工选修课程),在这个表中,同一个职工可能会有多个职工孩子姓名,一样,同一个职工也可能会有多个职工选修课程,即这里存在着多值事实,不符合第四范式。若是要符合第四范式,只须要将上表分为两个表,使它们只有一个多值事实,例如职工表一(职工编号,职工孩子姓名),职工表二(职工编号,职工选修课程),两个表都只有一个多值事实,因此符合第四范式。
拓展:各范式的关系图以下所示: