数据库三大范式

第一范式

定义:如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF(即R符合第一范式)

要点:强调列的原子性,即列不能够再分成其他几列

  • 1.每个字段取值单一,不允许重复
  • 2.每个字段不可以再分

以下不满足1NF

学号 姓名 联系电话
1 john 家庭电话:131000000,办公电话:151000000
1 mary 家庭电话:132000000,办公电话:152000000

点评:

  • 1.字段[学号]有重复;
  • 2.字段[联系电话]可以再分;

以下满足1NF

学号 姓名 家庭电话 办公电话
1 john 131000000 151000000
2 mary 132000000 152000000

第二范式

定义:如果关系模式R∈1NF(即R符合第一范式),并且每一个非主属性都完全依赖于R的码,则R∈2NF

要点:满足第一范式的前提下,消除非主属性对码的部分函数依赖

以下不满足2NF

学号 系名 宿舍楼 课程 分数
1 计算机 竹园1号楼 C语言 90

点评:

  • 这个表完全满足于第一范式:这个表的码(主键)为(学号,课程),这样可以定位到指定行。即:知道这两项可以确定系名、宿舍楼、分数,或者说这三项依赖于前两项。
  • 但是:由于非主属性[系名]、[宿舍楼]不完全依赖与码,不符合第二范式,可改为:

以下满足2NF

学号 课程 分数
1 C语言 90
学号 系名 宿舍楼
1 计算机 竹园1号楼

第三范式

定义:如果关系模式R∈3NF(即R符合第三范式),则每一个非主属性既不部分依赖于码也不传递依赖于码

要点:不存在非主属性对码的传递性依赖以及部分性依赖。即:在满足第二范式的前提下,消除一般属性对主键的传递依赖

以下不满足3NF

学号 系名 宿舍楼
1 计算机 竹园1号楼

点评:

  • 这个完全满足了第二范式,但不符合第三范式。
  • 因为知道了系名,同样也就知道了宿舍楼,称宿舍楼传递依赖于码(学号),可分解为:

以下满足3NF

学号 系名
1 计算机
学号 宿舍楼
1 竹园1号楼

总结

第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于:

  • 2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;
  • 3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。

一般满足前三个范式就可以避免数据冗余。

Copyright © www.sqlfans.cn 2024 All Right Reserved更新时间: 2022-01-14 17:30:01

results matching ""

    No results matching ""