首页 > 代码库 > 数据库规范化

数据库规范化

数据库

    基础知识   函数依赖 

        设R(U)是属性集U上的关系模式,x,y是u的子集,若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在x上的属性值相等,而在y上的属性值不等则

      称x函数确定y或者y依赖于函数x,记做x->y.

         在R(U)中,如果x->y,并且对于x的任何一个真子集x‘,都有x‘不确定y,则y对x为完全函数依赖

        记记作X→f(f在箭头上面)Y

       在R(U)中,如果x->y,但是y不完全依赖于x

        记做x->p(p在箭头上面)Y

        比如一个表为(学号,课程号,成绩)   (学号,课程号)->(成绩)为完全函数依赖

        (学号,课程号,所属院系)    (学号,课程号)->(院系)为部分函数依赖

       在R(U)中,如果x->y  y不属于x,y不确定x y->z,z不属于y则称z对x传递函数依赖。记做x->传递(传递在箭头上面)z

        比如  学号->院系 , 院系->系主任名字  所以称 学号->传递 系主任名字

   范式

     1 第一范式(1NF)无重复的列

  所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。

  说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。

         2 第二范式(2NF) 消除非主属性得码部分函数依赖

   定义 若R属于第一范式,且每一个非主属性完全函数依赖于任何一个候选码,称为第二范式

  第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是属性完全依赖于主键

  比如 (学号,课程号,成绩)  (学号,课程号)->(成绩)    满足2NF

      (学号,课程号,院系)  (学号,课程号)->(院系)    不满足2NF 因为 学号->院系   (学号,课程号)是(院系)的部分函数依赖

  不满足回导致

    a.数据冗余,假设同一门课由40个学生选修,学分就 重复40次。
    b.更新异常,若调整了某课程的学分,相应的元组CREDIT值都要更新,有可能会出现同一门课学分不同。
    c.插入异常,如计划开新课,由于没人选修,没有学号关键字,只能等有人选修才能把课程和学分存入。
    d.删除异常,若学生已经结业,从当前数据库删除选修记录。某些门课程新生尚未选修,则此门课程及学分记录无法保存。

      3 第三范式  消除非主属性对码传递依赖

  直接来例子 

    就是比如(学号,院系,院系地址)      学号->院系  ,院系->院系地址 这样就不是一个满足第三范式的表结构

    会产生跟二范式一样的问题

    4BCNF范式   消除主属性对码的部分和函数传递依赖

    比如(课程号,课程名,任课老师)  课程号是唯一码 符合3范式也满足BCNF范式

        (学生,教师,课程)  (学生,课程)-》教师  (学生,教师)-》课程    教师-》课程  因为教师决定课程所以就是部分函数依赖所以满足3nf但是不满足bcnf

 

   

数据库规范化