关于函数依赖最小键的疑问:为何{a,f}不是正确最小键?
关于关系模式最小候选键的推导解析
咱们一步步拆解这个问题,搞清楚到底哪里出了偏差~
首先明确最小候选键的核心定义:能唯一确定关系中所有属性的最小属性集合——既要满足闭包覆盖全部属性,又不能去掉任何一个属性(否则就无法覆盖全属性)。
先把给定的函数依赖列出来,方便推导:
A → B,C,DA,D → EE,F,G → HF → G,H
第一步:计算单个属性的闭包
- 计算A的闭包(A⁺):
- 由
A → B,C,D,A⁺初始包含{A,B,C,D} - 再看
A,D → E:因为A已经能推导出D,这个依赖的左部条件其实已经被A满足了,因此E也能被A推导出来。最终A⁺ ={A,B,C,D,E}
- 由
- 计算F的闭包(F⁺):
- 由
F → G,H,直接得到F⁺ ={F,G,H}
- 由
第二步:计算{A,F}的闭包
把A⁺和F⁺合并,得到{A,B,C,D,E,F,G,H}——这已经完全覆盖了关系中的所有属性(a,b,c,d,e,f,g,h)。
第三步:验证最小性
- 如果去掉A,只剩{F}:F的闭包只能覆盖
{F,G,H},无法得到其他属性,所以A不能去掉 - 如果去掉F,只剩{A}:A的闭包只能覆盖
{A,B,C,D,E},无法得到F、G、H,所以F不能去掉
所以**{A,F}确实是符合要求的最小候选键**,而所谓的{A,F,E}是冗余的——因为E已经能由A推导出来,属于非主属性,把E加入候选键后,它就不再是“最小”的了(去掉E后,{A,F}依然能确定所有属性)。
可能的误解点在于对A,D → E的理解:有人会误以为必须同时拥有A和D才能推出E,但实际上A已经能推导出D,所以单独的A就满足这个依赖的左部条件,不需要额外的D,更不需要把E放进候选键里。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

