首页 > 技术文章 > 数据库规范化

ZGQblogs 2020-03-11 19:31 原文

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

一.函数依赖

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

七.第四范式

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

推荐阅读