求最小函数依赖集(把多余依赖去掉):
思路:
右边化成单一属性,
去掉多余依赖
左边去掉某些属性依然可以推出右边,则删除该属性。
例1:设有函数依赖集F={AB→CE,A→C,GP→B,EP→A,CDE→P,HB→P,D→H,ABC→PG},求与F等价的最小函数依赖集。
解:(1).将F中依赖右部属性单一化:
F1= AB→C HB→P AB→E D→H A→C D→G GP→B ABC→P EP→A ABC→G CDE→P
(2).通过分析没有多余的依赖,则:
F3=AB→E HB→P A→C D→H GP→B D→G EP→A ABC→P CDE→P ABC→G
(3).对于AB→C,由于有A→C,则为多余的:
F2= AB→E HB→P A→C D→H GP→B D→G EP→A ABC→P CDE→P ABC→G
例2:设有关系模式R(U,F),其中:
U={E,F,G,H},F={E→G,G→E,F→EG,H→EG,FH→E} 求F的最小依赖集。
解:1)右边拆成单属性 F={E→G,G→E,F→E,F->G,H→E,H-->G,FH→E}
2)查找多余函数依赖,已知左边单个属性的有E,G,F,H,很容易知道E→G,G→E不是多余依赖,
F->E: F+=FGE,故F-->E或F->G是多余的。H-->E: H+=HGE故H-->E或H-->G是多余的
此时F={E→G,G→E,F-->E,H-->G,FH→E}
3)查找左边依赖是否有多余属性。FH-->E 此时F={E→G,G→E,F-->E,H-->G}
判断模式分解是否保持函数依赖
依据若F上每一个函数依赖都在其分解后的某一关系上成立,则这个关系是保持函数依赖的。