(1)范式概述和作用

  • 范式来自英文Normal form,简称NF。要想设计—个好的关系,必须使关系满足一定的约束条件,此约束已经形成了规范,分成几个等级,一级比一级要求得严格。满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常,避免可能存储了大量不需要的冗余信息。
  • 目前关系数据库有六种范式
    • 第一范式(1NF)
    • 第二范式(2NF)
    • 第三范式(3NF)
    • 巴斯-科德范式(BCNF)
    • 第四范式(4NF)
    • 第五范式(5NF,又称完美范式)
  • 在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推
  • 一般来说,数据库只需满足第三范式(3NF)就行了

(2)第一范式

  • 每一列都是不可分割的原子数据项
  • 下面的“系”列可以分割,不符合第一范式

image.png image.png

  • 存在的问题
    • 系名、系主任、姓名数据冗余
    • 添加一个新的系名、系主任时,数据不合法,没有学号、姓名、课程名称、分数

(3)第二范式

  • 在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)
  • 函数依赖

    函数依赖:A—>B,如果A属性(属性组)的值,可以确定唯一B属性的值,则称B依赖于A 例如:学号—>姓名 (学号,课程名称)—> 分数

  • 完全函数依赖

    完全函数依赖:A—>B,如果A属性(属性组),B属性值的确认需要A中的所有属性 例如:(学号,课程名称)—> 分数

  • 部分函数依赖

    部分函数依赖:A—>B,如果A属性(属性组),B属性值的确认只需要A中的部分属性 例如:(学号,课程名称)—> 姓名

  • 传递函数依赖

    例如:学号—>系名—>系主任

  • 主属性
  • 非主属性

    如果一张表中,一个属性(组)被其他所有属性完全依赖,则称这个属性(组)为该表的码 主属性:码属性组的所有属性 非主属性:除码属性组中的所有属性 例如:上述表的码是 (学号,课程名称)

  • 优化之后的表

image.png

(3)第三范式

  • 在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

image.png