数据库原理与应用 第 12 章 · 第二节
课程 › 第 12 章 › 第二节 定义与联系完全与部分传递依赖案例 版式
第 12 章 关系模式的规范化理论 · 第二节

函数依赖

函数依赖的定义,与属性联系的关系,完全、部分、传递三种函数依赖,以及案例
本 节 知 识 点
  1. 06函数依赖的定义
  2. 07函数依赖与属性之间的联系
  3. 08完全函数依赖与部分函数依赖
  4. 09传递函数依赖
  5. 10案例:商品库存的函数依赖
06
第 12 章 · 第二节 · 课件第 12、13 页合并重做

函数依赖的定义

X 的每个值只对应唯一的 Y 值,记作 X → Y。

12.2 函数依赖课件第 12、13 页合并

函数依赖的定义

从 y = f(x) 说起
  • 给定 x 的值,就能算出唯一的 y
  • 在 SCD 中,给定一个学号 SNo,就能确定唯一的姓名、年龄和系别
  • 所以说 SN、Age、Dept 函数依赖于 SNo
定义
设 R(U) 是属性集 U 上的关系模式,X、Y 是 U 的子集。如果对 R 的任意一个可能的关系,X 的每一个值都只对应唯一的 Y 值,就称 X 函数决定 Y,或 Y 函数依赖于 X,记作 X → Y。X 叫决定因素。
写法含义
X → YX 函数决定 Y
X ↛ YY 不函数依赖于 X
X ↔ YX → Y,同时 Y → X
SCD 的函数依赖集 F
F = { SNo → SN, SNo → Age, SNo → Dept, Dept → MN, (SNo, CNo) → Score }

重 点

函数依赖是本章唯一的工具,后面的范式都用它来定义。

实 验

实验 1-3 学号决定姓名、年龄、系别

07
第 12 章 · 第二节 · 课件第 14 页重做

函数依赖与属性之间的联系

属性之间是什么联系,就有什么样的函数依赖。

12.2 函数依赖课件第 14 页重做

函数依赖与属性之间的联系

X 与 Y 的联系函数依赖SCD 中的例子
1 : 1X → Y,Y → X,记作 X ↔ Y学生不重名时,SNo ↔ SN
m : 1只有 X → YSNo → Age,SNo → Dept
m : n没有函数依赖SNo 与 CNo
  • 函数依赖由属性的语义决定,与表中当前存了哪些数据无关,也不随时间改变
  • 表中的数据只能找出反例来否定一个函数依赖,不能证明它成立

试一试这条函数依赖在 SCD 中成立吗

点一行,看结论和理由
函数依赖成立吗

实 验

实验 1-5 学号与课程号

08
第 12 章 · 第二节 · 课件第 15、16 页合并重做

完全函数依赖与部分函数依赖

去掉左边的一部分还成立,是部分依赖,否则是完全依赖。

12.2 函数依赖课件第 15、16 页合并

完全函数依赖与部分函数依赖

X → Y,并且去掉 X 中任何一个属性后都不再决定 Y,称 Y 完全函数依赖于 X,记作 X →f Y。如果去掉某个属性后仍然决定 Y,称 Y 部分函数依赖于 X,记作 X →p Y。
函数依赖去掉一个属性以后类型
(SNo, CNo) → ScoreSNo 或 CNo 单独都决定不了 Score完全
(SNo, CNo) → SN只用 SNo 就能决定 SN部分
SNo → Age左边只有一个属性,不能再去掉完全
  • 判断方法:看左边的一部分能不能决定右边
  • 左边只有一个属性时,一定是完全函数依赖
  • 函数依赖一共有完全、部分、传递三种,传递函数依赖见下一页

重 点

2NF 要消除的就是非主属性对码的部分函数依赖。

实 验

实验 1-6 完全依赖与部分依赖

09
第 12 章 · 第二节 · 课件第 17、18 页合并重做

传递函数依赖

SNo 决定 Dept,Dept 决定 MN,中间绕了一道。

12.2 函数依赖课件第 17、18 页合并

传递函数依赖

如果 X → Y,Y ↛ X,Y → Z(Y 不是 X 的子集,Z 不是 Y 的子集),就称 Z 传递函数依赖于 X,记作 X →t Z。如果 Y → X 也成立,Z 就是直接函数依赖于 X,不算传递。
SCD 中的例子
SNo → Dept Dept ↛ SNo Dept → MN
  • 一个系有多名学生,Dept 决定不了 SNo
  • 所以 MN 传递函数依赖于 SNo
两个角度,四类函数依赖
非传递传递
完全完全非传递完全传递
部分部分非传递部分传递
  • 完全还是部分,看左边的一部分能否决定右边
  • 传递还是非传递,看中间有没有绕一道

重 点

3NF 要消除的就是非主属性对码的传递函数依赖。

练一练

商品编号 → 经销商编号,经销商编号 → 经销商名称,经销商编号决定不了商品编号。经销商名称对商品编号是什么依赖?
  1. A部分函数依赖
  2. B传递函数依赖
  3. C没有依赖
答案 B

中间经过经销商编号,并且经销商编号决定不了商品编号,所以是传递函数依赖。

实 验

实验 1-4 系别与系主任

10
第 12 章 · 第二节 · 课件第 19 页重做

案例:商品库存的函数依赖

先展开组合的属性,再一个编号一个编号地写出 F。

12.2 函数依赖课件第 19 页重做

案例:商品库存的函数依赖

商品库存(商品编号,名称,类别,生产厂家,入库时间, 概述,库存量,经销商信息)
第一步 展开经销商信息
  • 经销商信息 = 经销商编号 + 经销商名称 + 经销商联系方式
  • 展开前只能写出 商品编号 → 经销商信息,看不出内部的依赖
第二步 写出 F
商品编号 → 名称、类别、生产厂家、
           入库时间、概述、库存量
商品编号 → 经销商编号
经销商编号 → 经销商名称
经销商编号 → 经销商联系方式
  • 经销商名称、联系方式通过经销商编号,传递函数依赖于商品编号
  • 第 11 章台账中供应商的电话要重复存放,原因就在这里

想一想

商品库存应该怎样分解,才能消除这条传递依赖?

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