数据库理论作业 第八章 29 33

数据库理论作业 第八章

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可以成立,则以下式子需要成立:

  1. t1[A]=t2[A]=t3[A]=t4[A]
  2. t3[B]=t1[B]
  3. t3[R-B]=t2[R-B]
  4. t4[B]=t2[B]
  5. t4[R-B]=t1[R-B]

显然,式子3和式子5不成立,故A->->B不成立,同理A->->C不成立。

即A->->BC不能推出A->->B和A->->C成立

主要原因在于多值依赖是较为复杂的,不仅单纯设计到相关属性,与别的属性也相关。

发布了68 篇原创文章 · 获赞 36 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/dingdingdodo/article/details/102884826