一、范式的概念:
设计关系数据库时,我们通过遵循不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求就是范式。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。
二、范式的具体描述:
第一范式(1NF)(字段分离)
☆一个行的每个列必须是原子性的(唯一并且不能再分割),即任何给定行的列只能包含一个值。
第二范式(2NF)(表分离)
☆第二范式在第一范式的基础上进行了扩展。
☆表必须符合第一范式。
☆表中的所有非主键列必须依赖于整个主键列。
第三范式(3NF)(建立主键、唯一键等相关索引的约束关系)
☆确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
1NF:字段不可分;
2NF:有主键,非主键字段依赖主键;
3NF:非主键字段不能相互依赖;
解释:
1NF:原子性 字段不可再分,否则就不是关系数据库;
(要求数据库表的每⼀列都是不可分割的原⼦数据项)
2NF:唯一性 一个表只说明一个事物;
(要求数据库表中的每个实例或⾏必须可以被惟⼀地区分)
3NF:每列都与主键有直接关系,不存在传递依赖;
(要求⼀个数据库表中不包含已在其它表中已包含的⾮主键字段)
巴斯-科德范式(BCNF)
☆在3NF基础上,任何⾮主属性不能对主键⼦集依赖(在3NF基础上消除对主码⼦集的依赖)巴斯-科德范式(BCNF)是第三范式(3NF)的⼀个⼦集,即满⾜巴斯-科德范式(BCNF)必须满⾜第三范式(3NF)。通常情况下,巴斯-科德范式被认为没有新的设计规范加⼊,只是对第⼆范式与第三范式中设计规范要求更强,因⽽被认为是修正第三范式,也就是说,它事实上是对第三范式的修正,使数据库冗余度更⼩。这也是BCNF不被称为第四范式的原因。某些书上,根据范式要求的递增性将其称之为第四范式是不规范,也是更让⼈不容易理解的地⽅。⽽真正的第四范式,则是在设计规范中添加了对多值及依赖的要求。
(1)所有非主属性对每一个码都是完全函数依赖;
(2)所有主属性对每一个不包含它的码也是完全函数依赖;
(3)没有任何属性完全函数依赖于非码的任何一组属性。
第四范式(4NF)
☆对于第四范式,从理论层⾯来讲是,关系模式R∈1NF,如果对于R对于R的每个⾮平凡多值依赖X→Y(Y不属于X),X都含有候选码,则R∈4NF。4NF就是限制关系模式的属性之间不允许有⾮平凡且⾮函数依赖的多值依赖。显然⼀个关系模式是4NF,则必为BCNF
(1)消除表中的多值依赖,限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。
(2)也就是说,当一个表中的非主属性互相独立时(3NF),这些非主属性不应该有多值,若有多值就违反了4NF。第四范式禁止主键列和非主键列一对多关系不受约束。
第五范式(5NF)(完美范式)
☆不得存在不遵循键约束的⾮平凡连接依赖。如果且只有⼀个表符合4NF,同时其中的每个连接依赖被候选键所包含,此表才符合第五依赖
(1)必须满足第四范式;
(2)表必须可以分解为较小的表,除非那些表在逻辑上拥有与原始表相同的主键。
第五范式是在第四范式的基础上做的进一步规范化。第四范式处理的是相互独立的多值情况,而第五范式则处理相互依赖的多值情况。第五范式将表分割成尽可能小的块,为了排除在表中所有的冗余。