模式分解(2NF、3NF)

求闭包

求属性集XX\subseteq U)关于 U上的函数依赖集F的闭包 X_{F^{+}}

1、令X^{\left ( 0 \right )}=X,i=0。

2、对于F中所有左边为X^{\left ( i \right )}或其子集的函数依赖,把其右边的属性加入X^{\left ( i \right )},得到X^{\left ( i+1 \right )}

3、判断X^{\left ( i+1 \right )}是否等于U,若相等,则X_{F^{+}}=U。判断X^{\left ( i+1 \right )}是否等于X^{\left ( i \right )},若相等,则X^{\left ( i+1 \right )}。否则继续执行第二步,i++。

例:有关系 R<U, F>U={A,B,C,D,E}F=\left \{ AB\rightarrow C, A\rightarrow D, D\rightarrow E \right \},求\left (AB \right )_{F^{+}}

  1. AB^{\left ( 0 \right )}=AB
  2. AB\rightarrow C, A\rightarrow D得,AB^{\left ( 1 \right )}=ABCD
  3. D\rightarrow E \right得,AB^{\left ( 2 \right )}=ABCDE=U
  4. \left (AB \right )_{F^{+}}=U

 

求候选码

1、把函数依赖集F中的属性分为L类、R类、LR类和N类。

L类:只在函数依赖左边出现的属性

R类:只在函数依赖右边出现的属性

LR类:在函数依赖左边和右边都出现的属性

N类:未在函数依赖中出现的属性

2、对于各类,有如下性质:

  • 若X是L类,则X必为关系R的任一候选码
  • 若X是L类,且 X_{F^{+}}=U,则X为唯一候选码
  • 若X是R类,则X不在任何候选码中
  • 若X是N类,则X必包含在任一候选码中

3、对属于L类的属性,不断的加入LR的属性,形成属性组W,求 W_{F^{+}},若 W_{F^{+}}=U,则W为候选码。求出所有的Wi。

例:有关系 R<U, F>U={A,B,C,D,E}F=\left \{ AB\rightarrow C, A\rightarrow D, D\rightarrow E \right \}

L类:A、B,     R类:C、E,     LR类:D,     N类:无

则候选码中一定有AB,有\left (AB \right )_{F^{+}}=U,由性质2得,(A, B)为唯一候选码。


分解为2NF

若关系R<U, F>中,主键为W,有X\subset WX\rightarrow Z,则可把关系分解为 R_{1}<X,Z>R_{2}<U-Z>

判断R1,R2是否均符合2NF;若不符合,则继续按上述方法分解,直到符合为止。

例:有关系 R<U, F>U={A,B,C,D,E}F=\left \{ AB\rightarrow C, A\rightarrow D, D\rightarrow E \right \}

已知候选码为(A, B),有AB\rightarrow DE,A\rightarrow DE,故R不符合2NF,分解为R_{1}<A,D,E>R_{2}<A,B,C>

R1,R2均符合2NF。


求最小依赖集

1、去掉F中所有函数依赖右边的多属性。

例:A\rightarrow BC\Rightarrow A\rightarrow B,A\rightarrow C

2、去掉F中所有函数依赖左边的多属性。

例:对于AB\rightarrow C,若A_{F^{+}}\supset C,则A\rightarrow C

3、去掉冗余的函数依赖。

例:对于X\rightarrow W,若去掉该条函数依赖后,对于F中剩下的函数依赖,可以得到X_{F^{+}}\supset W,则该条函数依赖可去除


 

分解为3NF(保持函数依赖)

1、求F的最小依赖集,仍记为F。

2、对于F中为出现的属性,把这些属性构成一个关系模式R0,同时把这些属性从U中除去,剩余的属性仍记为U。

3、若有X\rightarrow A\in F,且XA=U,则算法终止,否则执行第4步。

4、对F中的所有函数依赖,按具有相同左部的原则分为k组。每一组中出现的所有属性组成的集合为U_{i},若U_{i}\subseteq U_{j}\left ( i\neq j \right )则去掉U_{i}。剩余的所有U_{i}各组成一个关系模式。

例:有关系R_{1}<A,D,E>R_{2}<A,B,C>U={A,B,C,D,E}F=\left \{ AB\rightarrow C, A\rightarrow D, D\rightarrow E \right \}

1、求F的最小依赖集

  • 右边无多属性,跳过
  • 左边AB\rightarrow C为多属性,求得A_{F^{+}}=ADE\nsupseteq C,B_{F^{+}}=B\nsupseteq C,故不可去除
  • 去掉AB\rightarrow C,有\left ( AB \right )_{F^{+}}=ABD\nsupseteq C;去掉A\rightarrow D,有\left ( A \right )_{F^{+}}=A\nsupseteq D;去掉D\rightarrow E,有\left ( D \right )_{F^{+}}=D\nsupseteq E,故不可去除

因此,F最小依赖集为F=\left \{ AB\rightarrow C, A\rightarrow D, D\rightarrow E \right \}

2、 F中所有属性均有出现,故跳过该步。

3、不满足算法终止条件,跳过该步。

4、按相同左部可分为(A, B, C),(A, D),(D, E)。他们之间彼此不存在包含关系,因此该关系模式可分解为R_{1}<A,B,C>R_{2}<A,D>R_{3}<D,E>

发布了73 篇原创文章 · 获赞 55 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_35756383/article/details/88652826
今日推荐