Skip to content
难度基础(★)
建议时长45分钟

3.6.2 规范化理论基本概念-01

本课核心知识点整理
本课核心知识点手绘流程图(SVG)

函数依赖是“决定关系”

函数依赖描述属性之间的语义约束。若在关系模式 R 中,任意两个元组只要属性集 X 的值相同,属性集 Y 的值也必然相同,就说 Y 函数依赖于 X,记作:

XY

例如在学生关系中,若学号唯一标识学生,则:

学号姓名,性别,专业号

这不是数学函数的计算公式,而是数据库语义:同一个学号不能对应两个不同姓名。

几类依赖的区别

依赖类型形式化理解直观判断范式影响
平凡函数依赖YXXY自己当然能决定自己的一部分通常不作为异常来源
非平凡函数依赖YX决定了集合外的新属性范式判断重点
完全函数依赖XY,且任何 X 的真子集都不能决定 Y必须靠整个组合键满足 2NF 所希望的状态
部分函数依赖XY,但某个真子集 XX 也能决定 Y组合键里有一部分多余破坏 2NF
传递函数依赖XY,YZ,且 Y 不能反向决定 X通过中间属性间接决定破坏 3NF 的典型原因

部分函数依赖只需要在候选键是组合属性时重点检查。单属性候选键没有真子集可用来决定非主属性,因此不会出现“候选键的一部分决定非主属性”的问题。

用例子看部分依赖

设关系:

选课(学号,课程号,姓名,课程名,成绩)

候选键通常是 {学号, 课程号},因为一名学生选一门课才对应一个成绩。但依赖中可能有:

学号姓名课程号课程名

姓名只依赖组合键的一部分“学号”,课程名只依赖组合键的一部分“课程号”,这就是非主属性对候选键的部分函数依赖。它会导致学生姓名、课程名在多条选课记录中反复出现。

用例子看传递依赖

设关系:

学生(学号,姓名,专业号,专业名)

若:

学号专业号专业号专业名

则学号通过专业号间接决定专业名:

学号专业号专业名

专业名并不应该依赖每个学生重复保存,而应由专业号决定。否则一个专业名改名,需要修改所有该专业学生记录。

Armstrong 公理的考试用法

字幕提到 Armstrong 公理体系,软件设计师考试不要求像理论课那样完整证明,但要会用几个推理规则判断依赖能否推出。

推理规则形式含义
自反律YX,则 XY属性集能决定自身子集
增广律XY,则 XZYZ两边加同样属性仍成立
传递律XY,YZ,则 XZ决定关系可传递
合并律XY,XZ,则 XYZ同一决定因素可合并右部
分解律XYZ,则 XYXZ右部可拆开

做题时最常用的是传递律和分解/合并。比如给出 A -> BB -> C,就可推出 A -> C;给出 A -> BC,就可推出 A -> BA -> C

做题路线

  1. 先把复合右部拆开,便于逐条推理,如 A -> BC 可拆为 A -> BA -> C
  2. 判断部分依赖时,先确认候选键是否为组合属性,再看其真子集是否能决定非主属性。
  3. 判断传递依赖时,寻找“候选键 -> 非主属性 -> 非主属性”的链条。
  4. 不要把“能推出”误认为“是候选键”。候选键还必须能推出全部属性且无冗余。

例题

单选
函数依赖 X -> Y 的含义是:
单选
部分函数依赖通常需要重点检查的情况是:

自查要点

  1. X -> Y 表示什么?
  2. 部分函数依赖为什么和组合键关系密切?
  3. 传递函数依赖通常怎样出现?