保持函数依赖的分解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1A 1AB 2AC a1 a1 2B a2 b22 3C b13 a3
1A 1AB 2AC a1 a1
2B a2 a2
3C b13 a3
例: 分解是否保持FD集,是否无损分解
设有关系模式:R(ABC), R上的FD集为: F= { A→B, B→C } 将R分解为:ρ ={ AB, AC }, ρ保持依赖?无损分解? 解:PAB(F)={A→B}, PAC(F)={A→C}。 ρ不保持依赖(丢失B→C);但是是无损分解:
1N 1NS a1 2S a2 3G b13
2SG
b21
a2
a3
例: 分解是否保持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, 所以ρ保持函数依赖; 也是无损分解:
1A 1AB 2AC a1 a1 2B a2 b22 3C b13 a3
总结
根据是否保持依赖、是否无损分解将分解分成四类: 无损分解 保持依赖 YES YES NO NO YES NO YES NO 说明 最好 (不丢失数据和依赖) 可接受 (丢失依赖, 会导致异常) 不能接受(丢失数据) 不能接受(丢失数据)
设有关系模式R(ABCD), R上的FD集为: F = { A→B, B→C , D→B } 求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等价,
1A 1AB 2AC a1 a1 2B a2 b22 3C b13 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 1NS a1 2S a2 3G a3
2SG
b21
a2
a3
例: 分解是否保持FD集,是否无损分解
设有关系模式:R(ABC), R上的FD集为: F= { A→B } 将R分解为:ρ ={ AB, AC }, ρ保持依赖?无损分解? 解:PAB(F)={A→B}, PAC(F)={ }。 ρ保持依赖; 也是无损分解:
1N 1NS a1 2S a2 3G b13
2NG
a1
a2
a3
思考:不保持函数依赖的 分解会导致什么问题?
例: 分解是否保持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, 所以ρ保持函数依赖; 也是无损分解:
保持函数依赖的分解
定义(FD集的投影):设F是属性集U上的FD集, F在Z上的投影PZ(F)定义为: Z是U的子集, PZ(F) ={X→Y | X→Y可由F推出, 且X, Y Z }
F={… } U R … X, Y Z … 如果X→Y可由F推出
ቤተ መጻሕፍቲ ባይዱ
投影
PZ(F)={ X→Y , …
}
例: FD集的投影
问题:如何在保证无损和保持依赖的前提下,使分解所 得的关系模式集符合尽可能高的范式? 目前有三个算法: 1. 保持依赖且无损地分解成3NF关系模式集 2. 无损地分解成BCNF关系模式集 3. 无损地分解成4NF关系模式集(超出课程范围, 不讲)
则称分解ρ保持函数依赖集F。
两个函数依赖集F和G是等价的,当且仅当:
1) 凡是能够由F推出的FD都能够由G推出; 2) 凡是不能由F推出的FD也不能由G推出。
例: 分解是否保持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, 所以ρ不保持 函数依赖; 但是是无损分解:
1N 1NS a1 2S a2 3G b13
2NG
a1
b22
a3
例: 分解是否保持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, 所以ρ不保持 函数依赖; 但是是无损分解:
1A 1AB 2AC a1 a1 2B a2 b22 3C b13 a3
1A 1AB 2AC a1 a1
2B a2 a2
3C b13 a3
例: 分解是否保持FD集,是否无损分解
设有关系模式:R(ABC), R上的FD集为: F= { B→A } 将R分解为:ρ ={ AB, AC }, ρ保持依赖?无损分解? 解:PAB(F)={B→A}, PAC(F)={ }。 ρ保持依赖; 但是是损失分解:
相关文档
最新文档