各种函数依赖

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

学生成绩表

学号 (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 2024-10-15 17:03  gogoy  阅读(56)  评论(0编辑  收藏  举报

导航