8.29
考虑如下关系模型$r(A,B,C,D,E,F)$上的函数依赖集F:
$$A→BCD$$
$$BC→DE$$
$$B→D$$
计算$B^+$
$B→BD$(依赖三)
$BD→ABD$(依赖四)
$ABD→ABCD$(依赖一)
$ABCD→ABCDE$(依赖二)
故$B^+=ABCDE$
(使用Armstrong公理)证明$AF$是超码。
$A→BCD$(依赖一)
$A→ABCD$(A的增强)
$BC→DE$(依赖二)
$ABCD→ABCDE$($ABCD$的增强)
$A→ABCDE$(传递性)
$AF→ABCDEF(F$的增强)
故$AF$是超码
计算上述函数依赖集$F$的正则覆盖;给出你的推到的步骤并解释。
根据依赖三我们知道D在依赖一和依赖二中都是冗余值,所以当我们将这两个移除之后,我们就得到了新的规则:
$A→BC$$BC→E$
$B→D$
$D→A$
而$B^+$是$ABCDE$,而且$FDB→E$可以从这个集合里面被定义,因此,$C$在依赖三中也是一个冗余值,再将其移除,并且合并到我们的$FD$之中,我们得到如下正则覆盖:
$A→BC$
$B→DE$
$D→A$
现在已经没有任何的冗余值了。
基于正则覆盖,给出$r$的一个$3NF$分解。
在正则覆盖中没有$FD,$使得属性集任何其他$FD$的子集。
因此,每个$FD$都会产生自己的关系
给出如下依赖关系:
$r_1(A,B,C)$
$r_2(B,D,E)$
$r_3(D,A)$
现在,属性$F$不依赖于任何属性。因此,它必须是每个超级钥匙的一部分。此外,上述模式中的任何关系都没有$F$,因此,它们都没有超级密钥。因此,我们需要使用超级键添加新关系。
$r_4(A,F)$
利用原始的函数依赖集,给出$r$的一个$BCNF$分解。
由已知有
$r(A,B,C,D,E,F)$
我们发现根据第一个$FD$,这个关系并不属于$BCNF,$根据这个可得
$r_1(A,B,C,D)r_2(A,E,F)$
发现$A→E$是一个在$F^2$中的$FD$,而且使得$r_2$不符合$BCNF$,所以我们再次将$r_2$分解得
$r_1(A,B,C,D)r_2(A,F)r_3(A,E)$
你能否利用正则覆盖得到与上面的$r$相同的$BCNF$分解?
如果我们直接在前面的最小函数依赖集中使用函数依赖,我们就无法得到上面的分解。但是,我们可以从最小函数依赖集推断出原始的依赖关系,如果我们将它们用于BCNF分解,就可以得到相同的分解。
8.33
给定一个关系模式$r(A,B,C,D),A→→BC$是否裸绩蕴含$A→→B$和$A→→C$?如果是请证明之,否则给出一个反例。
构造如下表:
A | B | C | D |
---|---|---|---|
a1 | b1 | c1 | d1 |
a1 | b2 | c2 | d2 |
a1 | b1 | c1 | d2 |
a1 | b2 | c2 | d1 |
如果$A→→B,$那么就存在这么一个$t_1和t_3$,使得$t_1[B]=t_3[B]。$
$t_1$和$t_3$必须满足如下关系式:
$t_1=r_1 且 t_3=r_3 或者 t_1=r_3 且 t_3=r_1:$
$在t_2=r_2或者t_2=r_4中,t_3[C]\neq t_2[C]$
$t_1=r_2 且 t_3=r_4 或者 t_1=r_4 且 t_3=r_2$
$在t_2=r_1或者t_2=r_3中,t_3[C]\neq t_2[C]$
由此,$t_3[C]=t_2[C]$就无法被满足,所以这个推测是错误的。