关系属性不可再分。
关系中 非主属性 完全函数 依赖于候选键。(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传递函数依赖于α。
平凡函数依赖:α→β 其中β⊆α
令 α→β 为传递函数依赖, 则存在α上的真子集γ且γ→β,因为α→γ(γ⊆ α),且γ→β。
若β-α不为空 则γ→β-α,所以β-α传递函数依赖于α。
若β-α为空 则α→β为平凡函数依赖(即β⊆α)
关系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(证明需要用到非平凡部分函数依赖一定为传递函数依赖)。
关系 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) ...... }
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。
X | Y |
X1 | Y1 |
X1 | Y2 |
X1 | Y3 |
X2 | Y1 |
X2 | Y2 |
X2 | Y3 |
2,非平凡多值依赖:关系R(U) , X,Y是集合U的子集,Z=U-X-Y为非空集合。且如下规则成立
X | Y | Z |
x1 | y1 | z1 |
x1 | y2 | z2 |
x1 | y2 | z1 |
x1 | y1 | z2 |
则 X→→Y(多值依赖)
3,函数依赖是一种特殊的多值依赖,X→Y对于X只有一个Y值与之相对应。
对于关系R ,函数依赖集F和多值依赖集D, 其中 对于任意非平凡多值(函数)依赖X→→Y,X必定为超键。(sovle: 解决了非平凡多值依赖冗余情况,如以上第二点情况 。problem:..)