目录

范式

目录
  1. 1NF :关系中的每个属性都是原子的,不可再分的,每个关系都要满足 1NF。 若一个关系只满足 1NF,这个关系可能存在四方面的问题

    1. 数据冗余度大
    2. 修改异常
    3. 插入异常
    4. 删除异常
  2. 2NF :满足 1NF 且表中不存在非主属性对码的部分函数依赖(即不依赖于主键的一部分) 如:S(Sno,Sname,age,Cno,grade) 先找出主键(Sno,Cno)成绩需要学号和课程号来确定 Snameage 只依赖于 Sno,存在部分函数依赖,所以 S 属于 1NF 如何解决部分函数依赖: 一张表只干一件事:把 S 表分为学生表和选课表

  3. 满足 2NF 且不存在非主属性对码的传递函数依赖 假定学生关系表为 Student (学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话),关键字为单一关键字"学号",因为存在如下决定关系: 

    (学号) → (姓名, 年龄, 所在学院, 学院地点, 学院电话)
    这个数据库是符合 2NF 的,但是不符合 3NF,因为存在如下决定关系:

    (学号) → (所在学院) → (学院地点, 学院电话)

    即存在非关键字段"学院地点"、“学院电话"对关键字段"学号"的传递函数依赖。

    它也会存在数据冗余、更新异常、插入异常和删除异常的情况,读者可自行分析得知。

    把学生关系表分为如下两个表:

    学生:(学号, 姓名, 年龄, 所在学院);

    学院:(学院, 地点, 电话)。

  这样的数据库表是符合第三范式的,消除了数据冗余、更新异常、插入异常和删除异常。

  1. BCNF :满足 3NF 且没有任何属性完全函数依赖于非码的任何一组属性 假定有一个表(城市,街道,邮政编码)邮政编码为主键 满足 1NF 且不存在非主属性对码的传递函数依赖和部分函数依赖 而非主属性组(城市,街道)→(邮政编码) 即该关系属于 3NF 但不属于 BCNF