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

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

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

函数依赖是“决定关系” ​

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

X→Y

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

学号→姓名,性别,专业号

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

几类依赖的区别 ​

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

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

用例子看部分依赖 ​

设关系:

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

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

学号→姓名课程号→课程名

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

用例子看传递依赖 ​

设关系:

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

若:

学号→专业号专业号→专业名

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

学号→专业号→专业名

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

Armstrong 公理的考试用法 ​

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

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

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

做题路线 ​

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

例题 ​

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

自查要点 ​

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