数据库原理与应用 第 12 章 · 第三节
课程 › 第 12 章 › 第三节 范式与 1NF2NF3NF原则和步骤无损连接 版式
第 12 章 关系模式的规范化理论 · 第三节

范式与模式分解

1NF、2NF、3NF 的定义,SCD 的两步分解,规范化的原则,无损连接与保持函数依赖
本 节 知 识 点
  1. 11范式与第一范式
  2. 12第二范式
  3. 13第三范式
  4. 14规范化的原则和步骤
  5. 15无损连接与保持函数依赖
11
第 12 章 · 第三节 · 课件第 21、22 页合并重做

范式与第一范式

范式是衡量规范化程度的标准,1NF 要求属性不可再分。

12.3 范式课件第 21、22 页合并

范式与第一范式

范式(Normal Form,NF)是衡量关系模式规范化程度的标准,由低到高有 1NF、2NF、3NF、BCNF、4NF、5NF。满足高一级范式的关系,一定满足低一级范式。
1NF2NF3NFBCNF4NF、5NF

外层要求低,越往里要求越高。本章讲到 3NF,BCNF 了解即可。

第一范式 1NF
  • 要求:每个属性都是不可再分的原子项
  • 做法:把可以再分的属性拆开
  • 一个字段中写了几个值,如爱好一栏写“篮球,读书”,就不满足 1NF
  • 第 11 章实验中订单的 goods_list 一栏写了两种商品,也不满足 1NF

练一练

下面哪张表不满足 1NF?
  1. A爱好一栏写着“篮球,读书”
  2. B某一列全是空值
  3. C有一列依赖另一列
答案 A

一个格子中写了两个爱好,属性还能再分,不满足第一范式。

12
第 12 章 · 第三节 · 课件第 23 页重做

第二范式

非主属性都要完全函数依赖于码,不能只依赖码的一部分。

12.3 范式课件第 23 页重做

第二范式

如果 R ∈ 1NF,并且每个非主属性都完全函数依赖于 R 的码,则 R ∈ 2NF。
SCD 不满足 2NF
  • 码是 (SNo, CNo),非主属性有 SN、Age、Dept、MN、Score
  • Score 完全依赖于码
  • SN、Age、Dept、MN 只靠 SNo 就能确定,对码是部分函数依赖
分解
SCD → SC(SNo, CNo, Score) SD(SNo, SN, Age, Dept, MN)
  • 把部分依赖的属性连同它们的决定因素 SNo 拿出来,单独成一个关系
  • 码只有一个属性的关系,一定满足 2NF
  • 主属性:包含在码中的属性,如 SNo、CNo。非主属性:不包含在任何码中的属性

重 点

只有码由几个属性组成时,才可能不满足 2NF。

实 验

实验 2-1 第一步:消除部分依赖

13
第 12 章 · 第三节 · 课件第 24 页重做

第三范式

非主属性不能通过别的非主属性依赖于码。

12.3 范式课件第 24 页重做

第三范式

如果 R ∈ 2NF,并且每个非主属性都不传递函数依赖于 R 的码,则 R ∈ 3NF。
SD 不满足 3NF
  • SD 的码是 SNo,已经满足 2NF
  • SNo → Dept,Dept ↛ SNo,Dept → MN,MN 传递函数依赖于 SNo
  • 信息系和王平在 SD 中仍然存了 2 次
分解
SD → S(SNo, SN, Age, Dept) D(Dept, MN)
  • 在 Dept 处切开,Dept 既留在 S 中,又是 D 的码
  • 最终 S、SC、D 三个关系都满足 3NF
SD 的数据
SNoSNAgeDeptMN
S1赵亦17计算机刘伟
S2钱尔18信息王平
S3孙珊20信息王平
S4李思21自动化刘伟

试一试这个关系最高属于第几范式

关系

练一练

R(A, B, C, D) 的码是 A,F = {A → B,B → C,A → D},R 最高属于第几范式?
  1. A1NF
  2. B2NF
  3. C3NF
答案 B

码只有一个属性,满足 2NF。A → B → C 是传递函数依赖,不满足 3NF。

实 验

实验 2-2 第二步:消除传递依赖

14
第 12 章 · 第三节 · 课件第 25、26 页合并重做

规范化的原则和步骤

一事一地,一个关系模式只描述一件事。

12.3 范式课件第 25、26 页合并

规范化的原则和步骤

基本原则是“一事一地”:一个关系模式只描述一个实体,或实体之间的一种联系。SCD 分解为 S、SC、D,学生、选课、系各占一张表。
范式要求从上一级到这一级要做的
1NF属性都是原子项拆开可以再分的属性
2NF非主属性完全函数依赖于码消除非主属性对码的部分函数依赖
3NF非主属性不传递函数依赖于码消除非主属性对码的传递函数依赖
BCNF主属性对码也没有部分、传递函数依赖消除主属性对码的部分、传递函数依赖
  • 范式越高,表越多,查询时要连接的表也越多。实际设计要兼顾查询效率和存储代价,一般做到 3NF
15
第 12 章 · 第三节 · 课件第 27 页重做

无损连接与保持函数依赖

分解的方法不唯一,切错了连回来会多出行。

12.3 范式课件第 27 页重做

无损连接与保持函数依赖

分解的两条要求
  • 无损连接:分解后的关系用自然连接连起来,与分解前的信息完全相同
  • 保持函数依赖:分解前的函数依赖,在分解后的关系中都还能表示出来
  • 分解的方法不唯一,要选同时满足这两条的分法
SD 的两种分法
分法连回来
S(SNo, SN, Age, Dept)
D(Dept, MN)
4 行,与 SD 相同
(SNo, SN, Age, MN)
(Dept, MN)
6 行,多出 2 行
按 MN 切开再连回来
SNoSNDeptMN
S1赵亦自动化刘伟
S1赵亦计算机刘伟
S2钱尔信息王平
S3孙珊信息王平
S4李思自动化刘伟
S4李思计算机刘伟
  • 刘伟同时是两个系的系主任,MN 决定不了 Dept,赵亦和李思各多连出一个系

重 点

判断是否无损,最直接的办法就是把分解后的表连回来,与原表比较。

实 验

实验 2-3 连回来核对

实 验

实验 2-4 切错一次

保山学院·人工智能教研室·曹鼎鼎