分解依据
为了让关系模式符合范式,要分解模式,分解后的模式是否与原来的模式等价,有3种情况:
- 分解具有无损连接性。
- 分解要保持函数依赖。
- 分解既要无损连接性,又要保持函数依赖。
保持函数依赖
设数据库模式
p={R1,R2,···,Rk}是关系模式R的一个分解,F是R上的函数依赖集,p中每个模式Ri上的FD集是Fi。如果{F1,F2,···,Fk}与F是等价的(即相互逻辑蕴涵)那么称分解p保持FD。
例1
设关系模式 R(U,F),其中 U={A,B,C,D,E},F={A→BC,C→D,BC→E,E→A},
- 分解
p={R1(ABCE),R2(CD)}是否保持函数依赖? - 分解
p={R1(ABE),R2(CD)}是否保持函数依赖?
答案1:
保持依赖,因为:
- R1(ABCE):保持
A→BC,BC→E,E→A - R2(CD):保持
C→D
答案2:
没有保持,因为 R1(ABE) 没有 C,没有保持 BC→E
例2
设关系模式 R(U,F),其中 U={A,B,C},F={A→B,B→C,A→C},则分解 p={R1(AB),R2(BC)} 是否保持函数依赖?
答案:
保持依赖,因为:
R1(AB)中,保持A → B、A → CR2(BC)中,保持B → C
无损连接分解
- 有损:不能还原
- 无损:可以还原
无损连接分解:指将一个关系模式 分解 成若干个关系模式后,通过 自然连接 等运算仍能 还原到原来 的关系模式
自然连接:以 同名列 进行 等值 匹配,重复属性保留一个
定理:基于候选键和函数依赖的分析法
应用场景: 1拆2 判断无损
如果R的分解为 p={R1,R2},F为R所满足的函数依赖集合,分解p具有无损连接性的充分必要条件是:
R1 ∩ R2 → (R1 - R2) 或 R1 ∩ R2 → (R2 - R1)
解释:
R1 ∩ R2:表示R1和R2的交集,为R1与R2中 公共属性组成R1 - R2:表示模式的差集,结果是R1中有但R2中没有的属性R2 - R1:表示模式的差集,结果是R2中有但R1中没有的属性
整体解释:R1 ∩ R2 的结果能够推导出 (R1 - R2),或者,R1 ∩ R2 的结果能够推导出 (R2 - R1),就说明无损连接
例子
有关系模式:成绩(学号,姓名,课程号,课程名,分数)
函数依赖:学号→姓名,课程号→课程名, (学号,课程号)→分数
若将其分解为:
- 成绩(学号,课程号,分数)
- 学生(学号,姓名)
- 课程(课程号,课程名)
请思考该分解是否为无损分解?
答题方法1,两两合并判断发:
先合并
成绩(学号,课程号,分数)和学生(学号,姓名):- 通过同名属性
学号自然连接 - 由于有:
学号 → 姓名,学号能够 确定姓名 - 所以合并结果:
合并关系1 (学号,课程号,分数,姓名)
- 通过同名属性
再与
课程(课程号,课程名)合并:- 通过同名属性
课程号自然连接 - 由于有:
课程号 → 课程名,课程号能够 确定课程名 - 所以合并结果:
合并关系2(学号,课程号,分数,姓名,课程名)
- 通过同名属性
能够还原,所以是无损连接
答题方法2,表格法(Chase Algorithm):
例子
提示: 1拆2 判断无损,推荐 基于候选键和函数依赖的分析法
第一问答案
P1 = { R1(AB) , R2(AC) }
判断是否保持依赖:通过 R1(AB) 可知与题干 F = { A → B} 相同,说明保持依赖
判断是否无损连接(基于候选键和函数依赖的分析法):
R1 ∩ R2的结果是AR1 - R2的结果是B- 符合题干
A → B
说明是无损连接
(不适合)判断是否无损连接(两两合并发):合并 R1(AB) 和 R2(AC):
- 通过同名属性
A自然连接 - 由于
A → B,A能确定B - 合并结果
合并(ABC)
与分解前相同,是无损
最终:保持依赖且无损
第二问答案
P2 = { R1(AB) , R3(BC) }
判断是否保持依赖:通过 R1(AB) 可知与题干 F = { A → B} 相同,说明保持依赖
判断是否无损连接(基于候选键和函数依赖的分析法):
R1 ∩ R2的结果是BR1 - R3的结果是AR3 - R1的结果是C- 题干只有
A → B,所以B无法推导A或C
最终:保持依赖,但有损连接
例子
答案
D
判断是否无损:
(A1,A2) ∩ (A1,A3)的结果是A1(A1,A2) - (A1,A3)的结果是A2(A1,A3) - (A1,A2)的结果是A3A1无法推导出A2或A3
所以是有损
判断是否保持依赖:
(A1,A2):不符合任何依赖(A1,A3):不符合任何依赖,注意:看似符合A1A3 → A2,其实不符合,因为 没有 A2
所以是不保持函数依赖



