题目
口已知关系模式R<U,F>,U=(A,B,C,D,E,G),F=(AC→B,CB→D,A→BE,E→GC),求AB,BC,AC是否为关系R的候选码。
已知关系模式R<U,F>,U={A,B,C,D,E,G},F={AC→B,CB→D,A→BE,E→GC},求AB,BC,AC是否为关系R的候选码。
题目解答
答案
解:设K为R<U,F>中的属性或属性组合。若KU,则K称为R的侯选码。
BC不是候选码,AB、AC是超码。
AB+=ABCDEG=U,AC+=ABCDEG=U,BC+=BCD,可以推出BC不是候选码;
进一步分析,A+=ABCDEG=U,即AB和AC都不是候选码的最小集,只是超码;
候选码应该是A。
解析
步骤 1:计算AB的闭包
根据给定的函数依赖集F,计算AB的闭包AB+。
- 从AB开始,根据F中的依赖关系,逐步扩展。
- AB → A, B
- A → BE,所以AB → A, B, E
- E → GC,所以AB → A, B, E, G, C
- AC → B,但B已经在AB+中,所以不需要添加。
- CB → D,但C和B已经在AB+中,所以D也可以加入。
- 因此,AB+ = {A, B, C, D, E, G} = U,即AB+ = U。
步骤 2:计算BC的闭包
根据给定的函数依赖集F,计算BC的闭包BC+。
- 从BC开始,根据F中的依赖关系,逐步扩展。
- BC → B, C
- CB → D,所以BC → B, C, D
- 由于没有其他依赖关系可以进一步扩展BC+,所以BC+ = {B, C, D} ≠ U,即BC+ ≠ U。
步骤 3:计算AC的闭包
根据给定的函数依赖集F,计算AC的闭包AC+。
- 从AC开始,根据F中的依赖关系,逐步扩展。
- AC → A, C
- AC → B,所以AC → A, B, C
- A → BE,所以AC → A, B, C, E
- E → GC,所以AC → A, B, C, E, G, C
- 因此,AC+ = {A, B, C, D, E, G} = U,即AC+ = U。
步骤 4:确定候选码
- AB+ = U,所以AB是超码。
- BC+ ≠ U,所以BC不是超码。
- AC+ = U,所以AC是超码。
- 由于A → BE,E → GC,所以A+ = U,即A是候选码。
- 因此,AB和AC都不是候选码的最小集,只是超码。
根据给定的函数依赖集F,计算AB的闭包AB+。
- 从AB开始,根据F中的依赖关系,逐步扩展。
- AB → A, B
- A → BE,所以AB → A, B, E
- E → GC,所以AB → A, B, E, G, C
- AC → B,但B已经在AB+中,所以不需要添加。
- CB → D,但C和B已经在AB+中,所以D也可以加入。
- 因此,AB+ = {A, B, C, D, E, G} = U,即AB+ = U。
步骤 2:计算BC的闭包
根据给定的函数依赖集F,计算BC的闭包BC+。
- 从BC开始,根据F中的依赖关系,逐步扩展。
- BC → B, C
- CB → D,所以BC → B, C, D
- 由于没有其他依赖关系可以进一步扩展BC+,所以BC+ = {B, C, D} ≠ U,即BC+ ≠ U。
步骤 3:计算AC的闭包
根据给定的函数依赖集F,计算AC的闭包AC+。
- 从AC开始,根据F中的依赖关系,逐步扩展。
- AC → A, C
- AC → B,所以AC → A, B, C
- A → BE,所以AC → A, B, C, E
- E → GC,所以AC → A, B, C, E, G, C
- 因此,AC+ = {A, B, C, D, E, G} = U,即AC+ = U。
步骤 4:确定候选码
- AB+ = U,所以AB是超码。
- BC+ ≠ U,所以BC不是超码。
- AC+ = U,所以AC是超码。
- 由于A → BE,E → GC,所以A+ = U,即A是候选码。
- 因此,AB和AC都不是候选码的最小集,只是超码。