各种函数依赖

假设我们有一个表格存储学生成绩信息:

学生成绩表

学号 (SNo)课程号 (CNo)分数 (Score)姓名 (Name)班级 (Class)

1. 平凡依赖(Trivial Dependency)

平凡依赖指的是属性集中的某个属性依赖于自身。不需要从其他属性获得信息。

例子:

  • 在表中,对于任何属性集 {SNo, CNo, Score},平凡依赖有 {SNo} → SNo, {CNo, Score} → Score 等。

2. 非平凡依赖(Non-Trivial Dependency)

非平凡依赖是指如果 X → Y 成立并且 Y 不属于 X,这称为非平凡依赖。

例子:

  • 在学生成绩表中,{SNo, CNo} → Score 是一个非平凡依赖,因为分数 Score 不属于组合键 {SNo, CNo}。

3. 完全函数依赖(Full Functional Dependency)

完全函数依赖是指 Y 对 X 是完全依赖的,但对 X 的任何真子集都不依赖,即去掉任何一个 X 的成分,依赖关系不再成立。

例子:

  • {SNo, CNo} → Score 是完全函数依赖,因为只有通过学号和课程号的组合才能唯一确定一个分数。

4. 部分函数依赖(Partial Functional Dependency)

部分函数依赖指的是在一个复合主键中,如果有一个非主属性依赖于主键的一部分,而不是整个主键。

假设学生成绩表的主键是由“学号 (SNo)”和“课程号 (CNo)”组合而成,这样能唯一标识一条记录。

然而,“姓名 (Name)”和“班级 (Class)”只依赖于“学号 (SNo)”而非整个主键,因为一个学生会有多个课程。因此,这里有部分函数依赖:

  • 名称 (Name) 依赖于 学号 (SNo)
  • 班级 (Class) 依赖于 学号 (SNo)

5. 传递函数依赖(Transitive Dependency)

传递函数依赖是指如果存在 X → Y 和 Y → Z,那么就有 X → Z。通常在属性集合中隐含信息传递。

例子:

  • 假设我们有一个额外的表记录班级信息,比如班级代表:
 
  班级信息表
  | 班级 (Class) | 班长 (Leader) |
  |--------------|---------------|

在这种情况下,学生成绩表中的班级对班长存在传递函数依赖:{SNo} → {Class} 和 {Class} → {Leader},因此 {SNo} → {Leader} 是传递依赖。

这些不同类型的依赖关系帮助我们识别数据库设计中的冗余、异常,并指导我们进行范式化处理。

posted on   gogoy  阅读(127)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
历史上的今天:
2013-10-15 Session概述(选自WebX)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示

目录导航