数据库系统工程师 · 范式 · 函数依赖

数据库范式和函数依赖怎么判断?

范式题看起来抽象,其实它一直在问同一件事:一个属性为什么能被确定?是谁决定了谁?把这个逻辑想清楚,候选键、属性闭包、第三范式就不会散。

数据库专题 软考题库编辑部 持续更新

函数依赖先看“谁决定谁”

如果 A 的值确定以后,B 的值也随之确定,就可以说 B 函数依赖于 A,常写成 A→B。范式题里的很多推导,其实都是围绕这些箭头展开。

属性闭包就是从一组属性出发,沿着函数依赖不断推出更多属性。最后如果能推出关系里的全部属性,这组属性就具备成为超键的条件;如果再去掉任何一个属性都不行,就可能是候选键。

函数依赖A→B:A确定时,B也被确定
属性闭包从某组属性出发,按依赖规则能推出的全部属性集合
候选键能唯一确定全部属性,且没有多余属性的最小属性组

第三范式重点看非主属性怎么被决定

第三范式常用来减少传递依赖带来的冗余和更新异常。简单说,不希望非主属性通过另一个非主属性间接依赖于候选键。

比如 学号→系号,系号→系名,那么学号可以间接推出系名。系名更应该跟系号放在系表里,而不是在学生表里反复存一遍。

概念判断重点常见错误
部分依赖非主属性依赖组合键的一部分没有先判断候选键
传递依赖非主属性通过非主属性间接依赖把所有间接推出都当成错误
第三范式减少传递依赖只背定义,不看例子
属性闭包按依赖一步步扩展漏掉可继续推出的属性

做范式题的一个稳妥顺序

第一步,列出题干给的函数依赖。第二步,求候选键或至少判断主属性。第三步,再看是否存在部分依赖、传递依赖。不要上来直接判断第几范式,容易被题干绕进去。

老师一般会提醒:范式不是背出来的,是推出来的。尤其是属性闭包题,宁愿慢一点,也要把每一步推出的新属性写清楚。

相关题目解析

下面这些题目和本专题的判断方法关联较强,适合读完概念后回到具体题干里校验理解。