函数依赖先看“谁决定谁”
如果 A 的值确定以后,B 的值也随之确定,就可以说 B 函数依赖于 A,常写成 A→B。范式题里的很多推导,其实都是围绕这些箭头展开。
属性闭包就是从一组属性出发,沿着函数依赖不断推出更多属性。最后如果能推出关系里的全部属性,这组属性就具备成为超键的条件;如果再去掉任何一个属性都不行,就可能是候选键。
函数依赖A→B:A确定时,B也被确定
属性闭包从某组属性出发,按依赖规则能推出的全部属性集合
候选键能唯一确定全部属性,且没有多余属性的最小属性组
第三范式重点看非主属性怎么被决定
第三范式常用来减少传递依赖带来的冗余和更新异常。简单说,不希望非主属性通过另一个非主属性间接依赖于候选键。
比如 学号→系号,系号→系名,那么学号可以间接推出系名。系名更应该跟系号放在系表里,而不是在学生表里反复存一遍。
| 概念 | 判断重点 | 常见错误 |
|---|---|---|
| 部分依赖 | 非主属性依赖组合键的一部分 | 没有先判断候选键 |
| 传递依赖 | 非主属性通过非主属性间接依赖 | 把所有间接推出都当成错误 |
| 第三范式 | 减少传递依赖 | 只背定义,不看例子 |
| 属性闭包 | 按依赖一步步扩展 | 漏掉可继续推出的属性 |
做范式题的一个稳妥顺序
第一步,列出题干给的函数依赖。第二步,求候选键或至少判断主属性。第三步,再看是否存在部分依赖、传递依赖。不要上来直接判断第几范式,容易被题干绕进去。
老师一般会提醒:范式不是背出来的,是推出来的。尤其是属性闭包题,宁愿慢一点,也要把每一步推出的新属性写清楚。
相关题目解析
下面这些题目和本专题的判断方法关联较强,适合读完概念后回到具体题干里校验理解。
- 函数依赖中属性闭包怎么求?属性闭包 / 函数依赖
- 数据库第三范式主要消除什么依赖?第三范式 / 数据库第三范式