判断是否为无损连接分解

这个就考前看了一本课外的辅导教材,现学了一下方法,不知道能不能回忆起来。

题目:U=(A,B,C,D,E)    F={A->D,E->D,D->B,BC->D,DC->A}

判断ρ={AB,AE,CE,BCD,AC}是否为无损连接分解。

解:

先求出候选键为CE。

然后画一个初始判定表如下图所示。

  A B C D E
AB a1 a2 b13 b14 b15
AE a1 b22 b23 b24 a5
CE b31 b32 a3 b34 a5
BCD b41 a2 a3 a4 b45
AC a1 b52 a3 b54 b55

解释一下这张初始判定表的含义:

直接看ρ,比如第一个是AB,那么就在A列写a1,在B列写a2,其余都写b1j。

然后开始计算。这时候要看F中的函数依赖。

比如,第一个是A->D,看A列有没有ai,看到有a1,再看D列中对应的,如果不相同,也有aj的话,就把其他换成aj,如果没有,就以第一个ai对应的bij为基准,其他都换成bij。

所以判定表应换成:

  A B C D E
AB a1 a2 b13 b14 b15
AE a1 b22 b23 b14 a5
CE b31 b32 a3 b34 a5
BCD b41 a2 a3 a4 b45
AC a1 b52 a3 b14 b55

接下来看E->D:

以前面修改后的表为基准。

  A B C D E
AB a1 a2 b13 b14 b15
AE a1 b22 b23 b14 a5
CE b31 b32 a3 b14 a5
BCD b41 a2 a3 a4 b45
AC a1 b52 a3 b14 b55

D->B:

这里看D列,因为b14对应B列有a2,所以就不以D列中a4为基准,而是以b14为基准,改B列对应位置为a2。

  A B C D E
AB a1 a2 b13 b14 b15
AE a1 a2 b23 b14 a5
CE b31 a2 a3 b14 a5
BCD b41 a2 a3 a4 b45
AC a1 a2 a3 b14 b55

BC->D:

当左边出现两个元素时,看B列和C列相同的行,发现是a2、a3,然后修改D列对应位置为a4。

  A B C D E
AB a1 a2 b13 b14 b15
AE a1 a2 b23 b14 a5
CE b31 a2 a3 a4 a5
BCD b41 a2 a3 a4 b45
AC a1 a2 a3 a4 b55

DC->A:

D列和C列有相同的行,是a3、a4,然后修改A列对应位置为a1。

  A B C D E
AB a1 a2 b13 b14 b15
AE a1 a2 b23 b14 a5
CE a1 a2 a3 a4 a5
BCD a1 a2 a3 a4 b45
AC a1 a2 a3 a4 b55

最终表:

  A B C D E
AB a1 a2 b13 b14 b15
AE a1 a2 b23 b14 a5
CE a1 a2 a3 a4 a5
BCD a1 a2 a3 a4 b45
AC a1 a2 a3 a4 b55

再看表中全部为a的行,发现是第三行,所以ρ为无损连接分解。

教材上的例题图片:




版权声明:本文为博主原创文章,未经博主允许不得转载。

你可能感兴趣的:(#,SQL数据库)