数据库规范化

个人理解,水平低下,谨慎阅读

一.函数依赖

如果知道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)是平凡的

七.第四范式

关系模式中,不允许有非平凡且非函数的多值依赖

原文地址:https://www.cnblogs.com/ZGQblogs/p/12464860.html