个人理解,水平低下,谨慎阅读
一.函数依赖
如果知道A就可以知道B,则B函数依赖于A
如果知道A就可以知道B,则B部分函数依赖于(A,C)
如果知道A就可以知道B,知道B就可以知道C,则C传递函数依赖于A
二.第一范式
关系中的每一个属性都是不可拆分的
三.第二范式
在满足第一范式的基础上,每一个非主属性完全函数依赖于主属性
也就是说不存在一个非主属性部分函数依赖于主属性
注:码可能由多个属性构成,构成码的属性就是主属性
四.第三范式
在满足第二范式的基础上,不存在非主属性传递依赖于码
或许可以理解为,没有在非主属性函数依赖于另一个非主属性,因为非主属性一定函数依赖于码
五.BCNF
NF就是范式
BCNF是指在第三范式基础之上,每一个决定因素都包含码
我不是很能理解这个,因为:
第二范式规定了不能存在部分依赖
第二范式规定了不能存在传递依赖
也就是说,一个非主属性一定直接依赖于码
这不就是每一个决定因素都包含码吗?
即使有多个候选码,不也应该如此吗
当然,这一切都建立与第一范式到BC范式是层层递进的情况下
毕竟还有一种说法,是第二范式到BC范式分别建立在第一范式的基础之上
六:多值依赖
定义直接抄书好了
设(R(U))是属性集(U)上的一个关系模式,(X,Y,Z)是(U)的子集,并且 (Z=U-X-Y)。关系模式(R(U))中多值依赖(X→→Y)成立,当且仅当对(R(U))的任一关系(r),给定的((x,z))值,有一组(Y)的值,这组值仅仅决定于(X)值而与(Z)值无关
当一张表的所有属性((X,Y,Z))都是主属性,((X1,Y1))对应了一组(Z)值
比如
X1 Y1 Z1
X1 Y1 Z2
X1 Y1 Z3
然而,((X1,Y2))也对应了一组(Z)值,并且与((X1,Y1))对应的Z值完全相同
X1 Y2 Z1
X1 Y2 Z2
X1 Y2 Z3
这两部分表合在一起,你就会发现,Z的取值与Y无关,这便是多值依赖
如果(Z)是空集,则(X→→Y)是平凡的
七.第四范式
关系模式中,不允许有非平凡且非函数的多值依赖