关系型数据库中的关系是需要满足一定条件的,满足这些不同程度的规范化就叫做范式。
范式按照规范化程度从低到高排序为第一范式,第二范式,第三范式,BC范式,第四范式,第五范式。
R(U)是属性集U的关系模型,X,Y是U的一个子集,对于R(U)中的任一个关系r,不可能存在两个元组在X上属性值相同,而在Y上属性值不同。则称X函数确定Y,或Y函数依赖X。
例子:
举例
有这样一个配件管理表WPE(WNO,PNO,ENO,QNT),其中WNO表示仓库号,PNO表示配件号,ENO表示职工号,QNT表示数量。
有以下约束要求:
(1)一个仓库有多名职工;
(2)一个职工仅在一个仓库工作;
(3)每个仓库里一种型号的配件由专人负责,但一个人可以管理几种配件;
(4)同一种型号的配件可以分放在几个仓库中。
分析表中的函数依赖关系,可以得到:
(1)ENO->WNO;
(2)(WNO,PNO)->QNT
(3)(WNO,PNO)->ENO
(4)(ENO,PNO)->QNT
候选码的定义就是一组能决定所有列(某一个元组)的属性。
所以根据这4个函数依赖关系,(WNO,PNO)显然肯定是,因为它可以决定QNT,也可以决定ENO,加上它本身,就是属性全集U了。
而(ENO,PNO),虽然只有一个决定QNT,但是ENO可以单独决定WNO,所以显然(ENO,PNO)也就能一起决定QNT和WNO,因此也是候选码。
满足最基本的条件,每一个分量都是不可分的数据项。
R属于第一范式,且每一个非主属性完全函数依赖于任何一个候选码,则R属于第二范式
R属于第二范式,若R中不存在码X,属性子集Y,非主属性Z,使得X决定Y,Y不决定X,Y决定Z,则R属于第三范式。
R属于第一范式,若X决定Y,且Y不是X的子集时X必含有码,即每一个决定因素都包含码,则R属于BC范式。
说人话,多值依赖就是一个表中多对多的关系,如果可以分成两列,这两列多对多,这就平凡的多值依赖,如果是分成三列,固定某一列的值,其他两列多对多,这就是非平凡的多值依赖,第四范式要消除的就是非平凡的多值依赖。
函数依赖是特殊的多值依赖,因为多对多其实也是一对多。
R属于第一范式,对应R的每一个非平凡多值依赖,X->->Y,X都含有码,则R属于第四范式。
第五范式是指关系模式R依赖均由R候选码所隐含。
这辈子应该不会用到的内容,就不管了。
原文:https://www.cnblogs.com/zxcoder/p/11941812.html