候选键能否包含多个NULL值及对应函数依赖有效性判定
候选键与函数依赖相关问题解答
1. 含多个NULL值的属性能否被认定为候选键
- 标准关系模型中,候选键的核心判定要求是:能够唯一标识关系中的每一条元组,且是满足该要求的最小属性集合。
- 由于NULL无法参与等值比较(两个NULL的相等判定结果为未知,不属于相等),存在多个NULL值的属性无法区分这些NULL对应的元组,完全不符合候选键的基础要求,因此不能被认定为候选键。
2. 机场表场景的具体判定
IATA_code是否属于候选键
该场景下IATA_code不属于候选键。你提到的「非NULL的IATA_code可唯一识别机场」的属性,属于数据库工程中常见的**唯一约束(唯一键)**范畴:唯一约束仅要求非NULL值不重复,允许存在多个NULL值,这和候选键、主键要求全列无NULL且唯一的规则有本质区别。
函数依赖 IATA_code → airport_id 是否成立
该判定分两种规则场景:
- 遵循标准SQL三值逻辑的场景:由于NULL不与任何值(包括其他NULL)相等,所有元组都不会违反「相同IATA_code对应相同airport_id」的规则,该函数依赖在当前表的实际数据下是成立的。
- 遵循经典关系模型函数依赖定义的场景:经典定义要求属性不能包含NULL值,所有元组的属性都必须有确定取值,因此该场景下由于存在NULL值,函数依赖不成立。
工程实践中一般默认采用前者的判定逻辑,即认可该场景下该函数依赖成立。
内容的提问来源于stack exchange,提问作者Pablo
相关产品推荐
相关产品推荐

