关系数据库设计的方法之一就是设计满足适当范式的模式,通常可以通过判断分解后的模式达到几范式来评价模式规范化的程度。范式有1NF,2NF,3NF,BCNF,4NF,5NF,其中1NF的级别最低。这几种范式之间,5NF⊂4NF⊂BCNF⊂3NF⊂2NF⊂1NF成立。通过分解,可以将一个低一级范式的关系模式转化成若干个高一级范式的关系模式,这个过程为规范化。下面我们来看一个栗子(好吃),有错误的地方希望读者可以提出改正。
供应者和它所提供的零件信息,关系模式FIRST和函数依赖集F如下:
FIRST(Sno,Sname,Status,City,Pno,Qty)(公司编号,名称,状态,城市,产品编号,数量)
F={Sno->Sname,Sno->Status,Status->City,(Sno,Pno->Qty)}
可以很明显的看出,该关系中不含有可以再分的数据项(什么是可以再分的数据项?想象一张table,不应存在两个相同的字段,即两个相同的数据项。如果存在了,就说明他有了可以再分的数据项,就不是关系模式的数据库了。存在了可再分的数据项,就要考虑新增实体,将两个数据项分别放到两个实体上),所以该关系满足第一范式的条件。
1NF 第一范式
定义:若关系模式R的每一个分量是不可再分的数据项,则关系模式R属于第一范式
第一范式有四个缺点:(1)冗余度大(2)引起数据修改不一致(3)插入异常(4)删除异常 此处对该四个缺点不进行详细描述
当我们使用第一范式设计数据库的时候,会发现我们以Sno作为主键(码)的时候,不能唯一标识非主键字段(非主属性)Qty,但是非主属性Sname,Status却可以被Sno唯一标识且和Pno没有关系,此时对于数据库的使用会存在影响,所以要消除这种部分函数依赖的情况。消除了这种部分函数依赖关系后,所得到的两个关系中非主属性完全依赖于码,这种规范称为第二范式。
2NF 第二范式
定义:若关系模式R∈1NF,且每一个非主属性完全依赖于码,则关系模式R∈2NF
换句话说,当第一范式消除了非主属性对码的部分函数依赖,则称为2NF。
我们将FIRST关系分解为FIRST1(Sno,Sname,Status,City)和FIRST2(Sno,Pno,Qty)后,两关系符合了第二范式的规范,消除了部分函数依赖的关系。
但在使用中我们发现,City依赖于Status,虽然Status依赖于Sno,但是在数据库使用过程中我们仍希望表中的每个字段(属性)可以依赖于主键(码),这样可以减少数据的冗余度和避免产生异常,这种规范称为第三范式。
3NF 第三范式
定义:若关系模式R(U,F)中若不存在这样的码X,属性组Y及非主属性Z(Z¢Y)使用X->Y(Y-/->X),Y->Z成立,则关系模式R∈3NF。
即当2NF消除了非主属性对码的传递函数依赖,则称为3NF。
BC范式
定义:若关系模式R∈1NF,若X->Y,且Y属于X,X必含有码,则关系模式R∈BCNF。
换句话说,所有的非主码属性都需要消除传递函数依赖,包括候选码,则称为BC范式
来源:https://www.cnblogs.com/binarybitcoffee/p/6380416.html