例题
关系模式R(ABCDE),F={A->C,C->D,B->C,DE->C,CE->A}
若分解成R1(AD)R2(AB)R3(BC)R4(CDE)R5(AE)判断是否具有无损连接性
画出如下表格如第一行:AD,那么在A,D的地方填入,i表示列号,其余地方就填入,i表示行号,j表示列号:
A | B | C | D | E | |
AD | a1 | b12 | b13 | a4 | b15 |
AB | a1 | a2 | b23 | b24 | b25 |
BC | b31 | a2 | a3 | b34 | b35 |
CDE | b41 | b42 | a3 | a4 | a5 |
AE | a1 | b52 | b53 | b54 | a4 |
注(数字都是下标)
先看A->C这个推导式:
A | B | C | D | E | |
AD | a1 | b12 | b13 | a4 | b15 |
AB | a1 | a2 | b23 | b24 | b25 |
BC | b31 | a2 | a3 | b34 | b35 |
CDE | b41 | b42 | a3 | a4 | a5 |
AE | a1 | b52 | b53 | b54 | a4 |
A这一列中,AD,AB,AE符号相同,所以要更新这几行中的C ,更新规则为
1.如果有全部更新为此
2.如果没有,就更新为i+j最小的b,所以此处全部更新为b13
3.如果为DE->C,那么需要D,E两列完全相同才能更新C
A | B | C | D | E | |
AD | a1 | b12 | b13 | a4 | b15 |
AB | a1 | a2 | b13 | b24 | b25 |
BC | b31 | a2 | a3 | b34 | b35 |
CDE | b41 | b42 | a3 | a4 | a5 |
AE | a1 | b52 | b13 | b54 | a4 |
再看 C->D这个推导式:
A | B | C | D | E | |
AD | a1 | b12 | b13 | a4 | b15 |
AB | a1 | a2 | b13 | b24 | b25 |
BC | b31 | a2 | a3 | b34 | b35 |
CDE | b41 | b42 | a3 | a4 | a5 |
AE | a1 | b52 | b13 | b54 | a4 |
BC,CDE对应的都是C是相同的,更新D为a4
A | B | C | D | E | |
AD | a1 | b12 | b13 | a4 | b15 |
AB | a1 | a2 | b13 | b24 | b25 |
BC | b31 | a2 | a3 | b34 | b35 |
CDE | b41 | b42 | a3 | a4 | a5 |
AE | a1 | b52 | b13 | b54 | a4 |
AD,AB,AE对应的C是相同的,更新D为a4,得到:
A | B | C | D | E | |
AD | a1 | b12 | b13 | a4 | b15 |
AB | a1 | a2 | b13 | a4 | b25 |
BC | b31 | a2 | a3 | a4 | b35 |
CDE | b41 | b42 | a3 | a4 | a5 |
AE | a1 | b52 | b13 | a4 | a4 |
所以做完所有推导式后得到:
A | B | C | D | E | |
AD | a1 | b12 | b13 | a4 | b15 |
AB | a1 | a2 | a3 | a4 | b25 |
BC | b31 | a2 | a3 | a4 | b35 |
CDE | a1 | b42 | a3 | a4 | a5 |
AE | a1 | b52 | a3 | a4 | a5 |
这是第一轮扫描的结果,但是这样只是第一轮扫描,我们要继续A->C,......的新一轮扫描,
1.若扫描后,有一行出现全为a,就可以停止扫描,表示具有无损连接性
2.如果直到扫描完后没有数据更改,也没有一行全为a,表示不具有无损连接性
扫描完毕后:
A | B | C | D | E | |
AD | a1 | b12 | a3 | a4 | b15 |
AB | a1 | a2 | a3 | a4 | b25 |
BC | b31 | a2 | a3 | a4 | b35 |
CDE | a1 | b42 | a3 | a4 | a5 |
AE | a1 | b52 | a3 | a4 | a5 |
没有一行全为a,所以不具有无损连接性.