关系模型范式分解的原因及方法

    为了建立冗余小,结构合理的数据库,将关系数据库中关系划分为不同等级的范式。目前为止的范式系列有:第一范式,第二范式,第三范式,BCNF,第四范式和第五范式,这六种范式一级比一级要求高。

   下面每种范式以一个例子来说明定义:

   一个关系模型R中,有职工号,姓名,电话号码组成一个表。

    第一范式:

    在关系R中的每个具体关系r中,如果每个属性值都是不可分割的最小的数据单元,则R是第一范式。

    例子中属性都是不可分割的,可知R属于第一范式,规范1NF的方法有:

    (1)重复存储职工号和姓名。关键字是电话号码。(不可取)

    (2)职工号为关键字,电话号码分为单位和住宅两个属性。

    (3)  职工号为关键字,但强制每条记录一个电话号码。

    第二范式:

    关系模式R(U,F)中所有的非主属性都完全依赖于任何一个候选关键字。

    如选课关系SCI(SNO,CNO,GRADE,CREDIT),SNO:学号,CNO:课程号,GRADE:成绩,CREDIT:学分

    关键字组合(SNO,CNO),CREDIT依赖于CNO,不完全依赖与候选键,所以不是第二范式。

    非第二范式产生的问题有:

     (1)数据冗余。一门课40个学生选,学分要重复40次。

     (2)更新异常。若调整某课程的学分,相应CREDIT都需要更新,有可能出现同一门课不同学分。

     (3)插入异常。如计划开课,由于没人选,没有学号关键字,只能等人选修才能把课程和学分录入。   

    (4)删除异常。   若学生结业,从当前数据库删除选修记录。某门课程新生尚未选修,此课程及学分无法保存。

      解决方法:

     分为两个关系模式SCI(SNO,SNO,GRADE),C2(CNO,CREDIT)。为第二范式。

    第三范式:

    关系模式R(U,F)中的所有非主属性对任何候选关键字都不存在传递依赖。

    如SI(SNO,SNAME,DNO,DNAME,LOCATION)分别为学号,姓名,所在系,系名称和系地址。

    SNO为单个关键字。肯定是2NF。但有大量冗余。

    SNO->DNO,DNO->LOCATION.而DNO->SNO不存在。依次SNO对LOCATION是传递函数依赖。非第三范式。

    解决方法:

    分为两个关系S(SNO,SNAME,DNO),D(DNO,DNAME,LOCTION)。S中必须有外键DNO。

 

   4.BCNF

   R(U,F)中的所有属性(包括主,非属性)都不传递函数依赖与R的任何候选关键字。

   如:WPE(WNO,PNO,ENO,QNT)分别表示:仓库号,配件号,职工号和数量。

 有如下条件:

(1)一个仓库多个职工。

(2)一个职工只在一个仓库工作。

(3) 每个仓库里各型号的配件由专人负责,但一个人可管理几种配件。

(4)同种型号的配件可以分放在几个仓库。

由PNO不能确定QNT,由组合(WNO,PNO)来确定,有函数依赖(WNO,PNO)->QNT,同样(WNO,PNO)->ENO。可知(WNO,PNO)是一个候选关键字。

而(PNO,ENO)同样也是候选关键字。所以WNO,PNO,ENO都是主属性,QNT是非主属性。由于QNT对任一个个候选关键字都是直接函数依赖,所以是3NF。

对于候选关键字(PNO,ENO),由于(PNO,ENO)->ENO,ENO->WNO,可知主属性WNO传递函数依赖与候选关键字,所以该模式不是4NF。

 

 

 

 

 

 

 

posted on 2009-03-28 23:46  王建一  阅读(4297)  评论(0)    收藏  举报

导航