无损链接的测试有两种:
一、定理法
二、算法测试
一、定理法:
简单来说就是,通过无损连接的充要条件去判断,但要注意能够使用其的情况:分解出的关系模式只有两个时才能使用。
1、定义:
设ρ={R1,R2}是关系模式R的一个分解,F是R上成立的函数依赖集,那么分解ρ相对于F是无损分解的充分必要条件是:
(R1∩R2)→(R1-R2)或(R1∩R2)→(R2-R1)
简单来说就是由R分解出来的两个模式,其交集(公共元素)能否反推得出这两个模式的任一 一个
2、例题讲解:
设有关系模式R(A,B,C),若在R上成立的函数依赖集F={A→B}
R分解成ρ1={R1(A,B),R2(B,C)} 和ρ2={R3(A,B),R4(A,C)}
判断ρ1 和 ρ2 的分解是否为无损连接分解。
(1)对于ρ1={R1(A,B),R2(B,C)}
- R1∩R2=B
- R1-R2=A
- R2-R1=C
结合函数依赖集F={A→B},R1∩R2既不能推出R1-R2,也推不出R2-R1,因此ρ1不具有无损连接分解性。
(2)对于ρ2={R3(A,B),R4(A,C)}
- R3∩R4=A
- R3-R4=B
- R4-R3=C
结合函数依赖集F={A→B},R3∩R4可以推出R3-R4,推不出R4-R3,但因为只需要能推出一个即可说明分解出来的集合具有无损连接分解性。因此ρ2是具有无损连接分解性的。
二、算法测试
1、步骤:
(1)画表格:关系模式R中的元素为列元素,分解出的ρ集合里面的元素为行元素;
(2)填值:所在行的行头元素,对应列元素存在填ai(下标为对于列元素所在列值);剩下的空格填bij(下标为空格的对应行、列值);
(3)依次选取依赖集子集,直至选取完所有的子集:
如果在子集左边元素所在列,能找到有相同的列值,锁定列值对应的行。更新锁定的行中,子集右边元素对应所在列的元素。
- 有ai,就把剩下的值全都改为ai;
- 只有bij,就改为行值最小的bij;
如果找不到相同的值,就不用更新。
(4)更新完表格的元素后,观察表格中是否存在一行值都是ai值的行,如果存在就是无损连接分解,如果不存在就是有损连接。
2、例题讲解:
设有关系模式R(A,B,C,D,E),R分解成ρ={AB,BC,AD},若在R上成立的函数依赖集 F={A→B,C→D},那么ρ相对于F是否为无损连接分解?】
ps:这里为了方便理解、对应步骤,将求解过程一步步拆:
(1)画表格:
A | B | C | D | E | |
AB | |||||
BC | |||||
AD |
(2)填值:
先填所在行的行头元素,对应列元素的情况:填a,只需要带有列标
A | B | C | D | E | |
AB | a1 | a2 | |||
BC | a2 | a3 | |||
AD | a1 | a4 |
这里解释以下是如何去填写的:
首先先看第一行的行头,为AB元素,有A有B。
- 那么先看第一列,行A对应列A,因此,就可以在(AB,A)这个空格里面填写a1;
- 然后第二列,行B对应列B,因此就可以在(AB,B)这个空格里面填写a2;
- 最后依次看第三列、第四列、第五列,都没有对应AB的元素,因此为空。
接着,看第二行的行头,为BC元素,有B有C。
- 同样的第一列没有,就为空;
- 看第二列,行B对应列B,因此在(BC,B)中填写a2
- 看第三列,行C对应列C,因此在(BC,B)中填写a3
- 最后依次看第四列、第五列,没有对应元素,为空
最后,看第三行的行头,为AD元素,有A有D。
- 依旧是先看第一列,行A对应列A,因此在(AD,A)中填写a1
- 看第二列、第三列,没有对应元素,就为空
- 看第四列,行D对应列D,因此可以在(AD,D)中填写a4
- 最后看第五列,没有对应元素,为空
再去填剩下的空格:填b,但要带有行标列标
A | B | C | D | E | |
AB | a1 | a2 | b13 | b14 | b15 |
BC | b21 | a2 | a3 | b24 | b25 |
AD | a1 | b32 | b33 | a4 | b35 |
(3)依次选取依赖集F={A→B,C→D}中的子集:
先看A→B
找到A列下,有相同元素的行:由于(AB,A)和(AD,A)的元素都是a1,因此选定AB行和AD行,去更新这两行中,B列的元素:
A B C D E AB a1 a2 b13 b14 b15 BC b21 a2 a3 b24 b25 AD a1 b32 b33 a4 b35
- (AB,B)对应元素为a2
- (AD,B)对应元素为b32
出现a元素,所以将(AD,B)中的元素b32改为a2
A B C D E AB a1 a2 b13 b14 b15 BC b21 a2 a3 b24 b25 AD a1 a2 b33 a4 b35
再看C→D,C列下,并没有出现有相同元素的行,所以不用更新,结束。
(4)最后观察该表格:
A | B | C | D | E | |
AB | a1 | a2 | b13 | b14 | b15 |
BC | b21 | a2 | a3 | b24 | b25 |
AD | a1 | a2 | b33 | a4 | b35 |
没有出现有一行全为a的,因此ρ相对于F不是无损连接分解。