当前位置:文档之家› 数据库保持函数依赖的分解

数据库保持函数依赖的分解

将R分解为:ρ ={ AB, AC }, ρ保持依赖?无损分解?
解:PAB(F)={A→B}, PAC(F)={ }。 ρ保持依赖; 也是无损分解:
1A 2B 3C 1AB a1 a2 b13 2AC a1 b22 a3
1A 2B 3C 1AB a1 a2 b13 2AC a1 a2 a3
例: 分解是否保持FD集,是否无损分解
设有关系模式:R(ABC), R上的FD集为: F= { A→B, B→C }
将R分解为:ρ ={ AB, AC }, ρ保持依赖?无损分解?
解:PAB(F)={A→B}, PAC(F)={A→C}。 ρ不保持依赖(丢失B→C); 但是是无损分解:
1A 2B 3C 1AB a1 a2 b13 2AC a1 b22 a3
1A 2B 3C 1AB a1 a2 b13 2AC a1 b22 a3
总结
根据是否保持依赖、是否无损分解将分解分成四类:
无损分解 保持依赖
说明
YES
YES
最好 (不丢失数据和依赖)
YES
NO 可接受 (丢失依赖, 会导致异常)
NO
YES
不能接受(丢失数据)
NO
NO
不能接受(丢失数据)
问题:如何在保证无损和保持依赖的前提下,使分解所 得的关系模式集符合尽可能高的范式?
例: 分解是否保持FD集,是否无损分解
设有关系模式:R( N,
S,
G)
职工工号 工资级别 工资数目
R上的FD集为:
F= {
N→S, /* 每个职工只有一个工资级别 */
S →G /* 一个工资级别只有一个工资数目*/
}
将R分解为:ρ ={ NS, NG }, ρ保持依赖?无损分解?
解:PNS(F)={N→S}, PNG(F)={N→G}。 因为根据N→S和N→G推不出S →G, 所以ρ不保持
梦想是注定孤独的旅行,路上少不了质疑和 嘲笑,
但那又怎样?
求PACD(F) 和PBD(F)
PACD(F)={ A→C , D→C } PBD(F)={ D→B }
定义(保持函数依赖的分解): 设ρ={R1,…,Rk}是关 系模式R的一个分解,F是R上的FD集,如果:
PR1(F)∪…∪ PRk(F)与F等价, 则称分解ρ保持函数依赖集F。
两个函数依赖集F和G是等价的,当且仅当: 1) 凡是能够由F推出的FD都能够由G推出; 2) 凡是不能由F推出的FD也不能由G推出。
目前有三个算法:
1. 保持依赖且无损地分解成3NF关系模式集 2. 无损地分解成BCNF关系模式集 3. 无损地分解成4NF关系模式集(超出课程范围, 不讲)
你只闻到我的香水,却没看到我的汗水。
你否定我的现在,我决定我的未来!
你嘲笑我一无所有,不配去爱,我可怜你总 是等待。
你可以轻视我们的年轻,我们会证明这是谁 的时代。
保持函数依赖的分解
定义(FD集的投影):设F是属性集U上的FD集, Z是U的子集,F在Z上的投影PZ(F)定义为:
PZ(F) ={X→Y | X→Y可由F推出, 且X, Y Z }
投影
F={… } U
R
X, Y


Z
PZ(F)={ X→Y , … }
如果X→Y可由F推出
例: FD集的投影
设有关系模式R(ABCD), R上的FD集为: F = { A→B, B→C , D→B }
1N 2S 3G 1NS a1 a2 b13 2SG b21 a2 a3
例: 分解是否保持FD集,是否无损分解
设有关系模式:R( N,
Байду номын сангаас
S,
G)
职工工号 工资级别 工资数目
R上的FD集为:
F= {
N→S, /* 每个职工只有一个工资级别 */
S →G /* 一个工资级别只有一个工资数目*/
}
将R分解为:ρ ={ NS, SG }, ρ保持依赖?无损分解?
1A 2B 3C 1AB a1 a2 b13 2AC a1 b22 a3
例: 分解是否保持FD集,是否无损分解
设有关系模式:R(ABC), R上的FD集为: F= { C→B, B→A }
将R分解为:ρ ={ AB, AC }, ρ保持依赖?无损分解?
解:PAB(F)={B→A}, PAC(F)={C→A}。 ρ不保持依赖(丢失C→B) ; 也是损失分解:
函数依赖; 但是是无损分解:
1N 2S 3G 1NS a1 a2 b13 2NG a1 b22 a3
例: 分解是否保持FD集,是否无损分解
设有关系模式:R( N,
S,
G)
职工工号 工资级别 工资数目
R上的FD集为:
F= {
N→S, /* 每个职工只有一个工资级别 */
S →G /* 一个工资级别只有一个工资数目*/
例: 分解是否保持FD集,是否无损分解
设有关系模式:R( N,
S,
G)
职工工号 工资级别 工资数目
R上的FD集为:
F= {
N→S, /* 每个职工只有一个工资级别 */
S →G /* 一个工资级别只有一个工资数目*/
}
将R分解为:ρ ={ NS, SG }, ρ保持依赖?无损分解?
解:PNS(F)={N→S}, PSG(F)={S→G}。 因为PNS(F)∪PSG(F)= F, 所以ρ保持函数依赖; 也是无损分解:
}
将R分解为:ρ ={ NS, NG }, ρ保持依赖?无损分解?
解:PNS(F)={N→S}, PNG(F)={N→G}。 因为根据N→S和N→G推不出S →G, 所以ρ不保持
函数依赖; 但是是无损分解:
1N 2S 3G 1NS a1 a2 b13 2NG a1 a2 a3
思考:不保持函数依赖的 分解会导致什么问题?
解:PNS(F)={N→S}, PSG(F)={S→G}。 因为PNS(F)∪PSG(F)= F, 所以ρ保持函数依赖; 也是无损分解:
1N 2S 3G 1NS a1 a2 a3 2SG b21 a2 a3
例: 分解是否保持FD集,是否无损分解
设有关系模式:R(ABC), R上的FD集为: F= { A→B }
1A 2B 3C 1AB a1 a2 b13 2AC a1 a2 a3
例: 分解是否保持FD集,是否无损分解
设有关系模式:R(ABC), R上的FD集为: F= { B→A }
将R分解为:ρ ={ AB, AC }, ρ保持依赖?无损分解?
解:PAB(F)={B→A}, PAC(F)={ }。 ρ保持依赖; 但是是损失分解:
相关主题