给定关系模式R<U,F>,其中:属性集U = {A,B,C,D,E},函数依赖集F={AC→B,B→CD}。关系R (问题1) ,且分别有 (问题2) 。
候选键是能唯一标识关系中所有元组的最小属性集合,需满足两个核心条件:一是该属性集的闭包等于关系的全部属性集,二是去掉集合内任意一个属性后,无法再确定全部属性。求解候选键时,要关注两类特殊属性:一是孤立属性,也就是不在任何函数依赖的左部或右部的属性,这类属性必须包含在候选键中,因为没有函数依赖能推导它;二是仅出现在函数依赖右部的属性,这类属性不可能成为候选键的一部分,因为它无法决定其他属性。同时可利用函数依赖的传递性简化闭包计算,比如由X→Y、Y→Z,可推导X→Z,快速判断属性集能覆盖的所有属性。
主属性是所有候选键所包含的属性,只要出现在任意一个候选键中即为主属性;非主属性是完全未出现在任何候选键中的属性,二者的数量可通过候选键的属性并集与总属性集的差集计算得出。
此题考察的是关系模式的候选键和主属性/非主属性的判断。
我们可以通过分析函数依赖求闭包(或者画有向图)来找出候选键,并通过候选键确定主属性和非主属性。
问题 1:
首先,给定的属性集是 {A, B, C, D, E},函数依赖集为 {AC → B, B → CD}。
- AC → B 说明,A 和 C 可以决定 B。
- B → CD 说明,B 可以决定 C 和 D。
要找出候选键,首先要理解候选键是能够唯一标识关系中的所有元组的属性集。通过函数依赖,我们可以发现:
AC 可以决定 B,进而通过 B 可以决定 C 和 D,因此 AC 可以决定 {A, B, C, D}。
但是,AC 不能决定 E。因此,E 需要与其他属性组合,才能决定所有属性。
通过组合 A, B, C,可以找到一个候选键是 ABE,同理,ACE 也是一个候选键。
AC 不能单独成为候选键,因为它无法决定 E。因此,选项 A 和 B 都不正确。
通过分析可得,选项 D "无正确答案" 是正确的。
问题 2:主属性是任何候选键中的属性,而非主属性是未包含在任何候选键中的属性。我们已经确定 ABE 和 ACE 是候选键。主属性是 {A, B, E, C},非主属性是 {D}。因此,主属性有 4 个,非主属性有 1 个。
所以,正确答案是 A. 1个非主属性和4个主属性。
你也可以通过函数依赖图(有向图) 来辅助求解候选键,如下所示:

