数据库理论作业 第八章
8.29
考虑如下关系模式r(A,B,C,D,E,F)上的函数依赖集F:
A->BCD BC->DE B->D D->A
-
a.计算B+
最初result=B;
由于B->D,故result=B∪D=BD;
由于D->A,故result=BD∪A=ABD;
由于A->BCD,故result=ABD∪BCD=ABCD;
由于BC->DE,故result=ABCD∪DE=ABCDE;
最终结果为B+=ABCDE
-
b.(使用Armstrong公理)证明AF是超码
由于A->BCD,故A->ABCD(增补率,两边增补A)
由于BC->DE,故ABCD->ABCDE(增补率,两边增补ABCD)
因此A->ABCDE(传递率)
因此AF->ABCDEF(增补率,两边增补F)
因为AF可以推出所有属性,即AF的闭包包含所有属性,故AF是超码
-
c.计算上述函数依赖集F的正则覆盖;给出推导步骤并解释
首先观察可知无左侧元素相同的可合并的函数依赖,因此查看无关属性。由于B->D,因此在A->BCD和BC->DE中D均为无关属性(A->B,B->D,故A->D,因此A->BC结合A->D可以推出A->BCD;B->D故BC->D,因此BC->E结合BC->D可以说明BC->DE;因此D为无关属性),因此式子可以简化为:
A->BC BC->E B->D D->A
由于B->D,D->A,A->BC,因此B->C,因此BC->E中C为无关属性,因此可简化为:
A->BC B->E B->D D->A
左侧为B的有两项,可合并:
A->BC B->DE D->A
发现当前无无关属性,因此此时即为F的正则覆盖
-
d.基于正则覆盖,给出r的一个BCNF分解
由于正则覆盖中没有多余的函数依赖,因此属性集是正则覆盖中其他函数依赖组成的子集,因此这里的三个函数依赖都有自己的关系:r1(A,B,C) r2(B,D,E) r3(D,A) 然后我们发现属性F并不在其中,因为AF是超码且上述的关系中并没有原关系的超码,因此需要添加 r4(A,F)
因此最终结果为:r1(A,B,C) r2(B,D,E) r3(D,A) r4(A,F)
-
e.利用原始的函数依赖集,给出r的一个BCNF分解
start: r={A,B,C,D,E,F}
由于A->BCD但A不是超码,故r不满足BCNF,进行分解:
step1:r= r1(A, B, C, D),r2(A, E, F)
由于A->E是F+中的函数依赖,因此r2不满足BCNF,进行分解
step2:r=r1(A, B, C, D),r2(A, F),r3(A, E)
检验可得现在均符合BCNF
-
f.你能否利用正则覆盖得到与上面的r相同的BCNF分解?
若想通过正则覆盖得到与上面r相同的BCNF分解,直接进行BCNF分解是不行的,需要通过从正则覆盖推断出原始函数依赖并将其进行BCNF分解才能够得到相同的BCNF分解
8.33
给定一个关系模式r(A,B,C,D),A->->BC是否逻辑蕴含A->->B和A->->C?如果是请证明,如果不是请举出反例
答:不能推导。
首先构造一个简单的r(A,B,C,D),使其满足A->->BC,较容易写出来:
A | B | C | D |
---|---|---|---|
a1 | b1 | c1 | d1 |
a1 | b2 | c2 | d2 |
a1 | b1 | c1 | d2 |
a1 | b2 | c2 | d1 |
这个表格中A->->BC成立。
如果该A->->B可以成立,则以下式子需要成立:
- t1[A]=t2[A]=t3[A]=t4[A]
- t3[B]=t1[B]
- t3[R-B]=t2[R-B]
- t4[B]=t2[B]
- t4[R-B]=t1[R-B]
显然,式子3和式子5不成立,故A->->B不成立,同理A->->C不成立。
即A->->BC不能推出A->->B和A->->C成立
主要原因在于多值依赖是较为复杂的,不仅单纯设计到相关属性,与别的属性也相关。