数据库之各类范式(1NF,2NF,3NF,BCNF,4NF)

1,第一范式(1NF)

   关系属性不可再分。

 

2,第二范式(2NF)

   关系中 非主属性 完全函数 依赖于候选键。(solve:解决了非主属性部分函数依赖于候选键。 problem:非主属性之间存在函数   依赖。存在传递函数依赖。)

主属性: 包含在候选键中的属性的属性(所有候选键的并集)。

非主属性:不包含候选键任何属性的属性。

例子1:R(A,B,C,D,E)F{A->C,A->D,B->E} ,AB为候选键。因为AB->CD属于部分函数依赖(即A->CD),所以R∉2NF。

例子2:R(A,B,C)F{A->C,C->B} , A为候选键(即A->BC完全函数依赖R∈2NF)。因为存在传递依赖(即A->C C->B,则A->B),会出现类似冗余

{(A1,B1,C1),(A2,B1,C1),(A3,B1,C1)......}。

证明:非平凡部分函数依赖一定为传递函数依赖

部分函数依赖:α→β,若α上的存在真子集γ,使得γ→β,则β部分函数依赖于α。

传递函数依赖:关系R上,α→β,β!→α(β不等决定阿尔法),存在属性A,A∉α,A∉β,A∈R,且β→A,则A传递函数依赖于α。

平凡函数依赖:α→β 其中β⊆α

令 α→β 为传递函数依赖, 则存在α上的真子集γ且γ→β,因为α→γ(γ⊆ α),且γ→β。

若β-α不为空 则γ→β-α,所以β-α传递函数依赖于α。

若β-α为空 则α→β为平凡函数依赖(即β⊆α)

3,第三范式(3NF)

  关系R∈2NF,且不存在 非主属性 传递函数依赖于 候选键(solve:解决了2NF,中非主属性的传递函数依赖于主属性的冗余 problem:主属性对候选码存在部分函数依赖或者传递函数依赖冗余)

例子1:关系R(A,B,C,D,E,F) , F{A→B,B→CDEF},其中A为主码,因为A→CBDEF不存在部分函数依赖,所以此关系R∈2NF,由于存在传递函数依赖,所以R∉3NF。

例子2:关系R(A,B,C), F{AC→B,AB→C,B→C},AC,AB为候选键,选AB为主码,显然R∈3NF(不存在非主属性的传递函数依赖:没有非主属性),但其会出现类似于此类的冗余(候选键中某属性(C)函数依赖于其他候选键中某个属性(B) )

{ (A1,B1,C1),(A2,B1,C1),(A3,B1,C1)....... }

举一个更为一般的3NF的冗余例子,设关系R,由n个候选键组成Pi(1 <= i <= n),每个候选键存在m个属性 pj (1 <= j <= m) ,若某个候选键中的某些属性(个数 <= m-1)函数依赖于 另外 一个候选键的某些属性(个数 <= m-1),则这些属性的并集U1,可能重复出现相同的值。如x1,可能多次在表中重复出现。

属于3NF一定属于2NF(证明需要用到非平凡部分函数依赖一定为传递函数依赖)。

4,BCNF范式

  关系 R∈3NF,且任意非平凡函数依赖 α→β∈F , 则 α 必定为候选键。(solve:解决了3NF中主属性对后选键的部分函数依赖或传递函数依赖 problem:存在多值函数依赖冗余)

例子1:R(A,B,C,D,E) F{AB→U,CD→U,C→B},显然R∈3NF,因为主属性B部分函数依赖于候选键CD(即C→B,C不为候选键),所以R ∉BCNF。

例子2:R(A,B,E) F{AB→E},函数依赖都满足非平凡函数依赖左边为候选键,所以R∈BCNF。但其可能出现类似冗余。

{ (A1,B1,E1),(A1,B2,E2),(A1,B2,E1),(A1,B1,E2) ...... }

R(A,B,E)

A

B

E

A1

B1

E1

A1

B2

E2

A1

B2

E1

A1

B1

E2

多值依赖(MVD)

1,平凡多值依赖:

  关系R(U) , X,Y是集合U的子集,Z=U-X-Y为空集。且存在每个X有一组Y(也可以只有一个Y值此时为函数依赖)与之对应(即X→→Y)称 Y 多值依赖与 X。

R(X,Y)
X Y
X1 Y1
X1 Y2
X1 Y3
X2 Y1
X2 Y2
X2 Y3

2,非平凡多值依赖:关系R(U) , X,Y是集合U的子集,Z=U-X-Y为非空集合。且如下规则成立

R(X,Y,Z)
X Y Z
x1 y1 z1
x1 y2 z2
x1 y2 z1
x1 y1 z2

 

 

 

 则 X→→Y(多值依赖)

3,函数依赖是一种特殊的多值依赖,X→Y对于X只有一个Y值与之相对应。

 

5,第四范式(4NF)

对于关系R ,函数依赖集F和多值依赖集D, 其中 对于任意非平凡多值(函数)依赖X→→Y,X必定为超键。(sovle: 解决了非平凡多值依赖冗余情况,如以上第二点情况 。problem:..)

猜你喜欢

转载自blog.csdn.net/weixin_41237676/article/details/89323320