个人理解,水平低下,谨慎阅读
一.函数依赖
如果知道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\)是平凡的
七.第四范式
关系模式中,不允许有非平凡且非函数的多值依赖