求最小函数依赖集(把多余依赖去掉):

思路:

右边化成单一属性,

去掉多余依赖

左边去掉某些属性依然可以推出右边,则删除该属性。

例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上每一个函数依赖都在其分解后的某一关系上成立,则这个关系是保持函数依赖的。