二目关系属于4nf_关系数据理论知识点总结

本文详细介绍了关系数据理论,包括函数依赖、完全函数依赖、传递函数依赖、候选码、主属性、多值依赖等概念,并通过实例解析了1NF到4NF的规范化过程,帮助读者理解数据库设计的基础知识。
摘要由CSDN通过智能技术生成
由于头条号对公式支持还不够完备,所以建议大家关注微信公众号“IT工匠”后在后台回复B2获取本文原文pdf获得更佳阅读体验。

本文目录如下:

b45fb1eabf1adc4d92769cd64b65d0cb.png

image-20190626234720043

关系数据理论

提示:由于公众号对公式的支持太垃圾,会出现比如公式编号消失不见等问题,建议大家点击阅读原文获得更佳阅读体验。

前备知识

函数依赖

在属性集U上,X、Y都是U上的子属性集,如果可以根据属性集X中属性的值唯一确定属性集Y中属性的值,则称Y函数依赖于X,记做$Xo Y$.

比如说:

实例1:属性集U={学号,姓名,年龄},{学号}和{姓名}都是属性集U上的子集,当给定一个学号的值时,可以唯一个姓名的值,这样就符合函数依赖的关系,我们说{姓名}函数依赖于{学号},即$学号姓名{学号}o {姓名}$。

实例2:还有一种情况,比如说X={学号,姓名},Y={姓名},当给定一个X的值时,也可以唯一确定Y的值,也有Y函数依赖于X,即$学号姓名姓名{学号,姓名}o{姓名}$

可以发现实例2中Y是X的子集,即$Y subseteq X$,这种情况我们称$Xo Y$是平凡的函数依赖,而对于实例1,$Y subseteq X$不成立,这种情况下我们称$Xo Y$是非平凡的函数依赖

完全函数依赖

在R(U)中,如果Y函数依赖于X但是Y不函数依赖于X的任何子集,则称Y完全函数依赖于X,记为$Xstackrel{F} o Y$,否则称Y部分依赖于X,记做$X stackrel{P} o Y$。

比如属性集U中有3个属性:${a,b,c}$,如果${a,b}o {c}$,且${a} o {c}$,就不能说${c}$完全函数依赖于$,{a,b}$,反过来,如果${a,b} o {c } $,但${a} rightarrow {c}$且${b} rightarrow {c}$,则说明{c}完全函数依赖于{a,b},即${a,b}stackrel{F} o {c}$.

传递函数依赖

在R(U)中,如果$X o Y , Y rightarrow X,Yo Z$,则称Z传递函数依赖于X,记为$传递X stackrel{传递} o Z$.

注意这里一定要满足条件$ Y rightarrow X$,如果$Yo X$,则有$X leftrightarrow Y$,这时就是$Xo Z$,而不是$传递X stackrel{传递} o Z$.

候选码

设K为R(U)中的属性或属性集合,若$Kstackrel{F} o U$,则称K为R的候选码.

其实说白了,候选码就是最小的可以推出U中所有属性的集合,也就是说,如果确定了一组候选码的值,可以唯一确定一组U中所有属性的值,举个例子,U={a,b,c,d},如果{a,b}的属性值确定后可以唯一确定{c,d}的值,即${a,b}o {c,d}$,则{a,b}就是一组候选码(因为${a,b} o {a,b}$一定是成立的,又有${a,b}o {c,d}$,所以${a,b} o {a,b,c,d}$即${a,b} o U$)。

主属性

我们说候选码是最小的可以推出U中所有属性的集合,而这个集合中的任意一个属性值,就称为主属性,而在集合U中但不在候选码集合中的属性称为非主属性

多值依赖

多值依赖比较抽象,这里用一张图解释:

d4709a594adcfc6edd6def3f4e325565.png

image-20190626200649372

如上图所示,我们假设R(U)是属性集U上的一个关系模式,将U划分为3个子集X、Y、Z,注意这里的X、Y、Z是三个子集,每一个子集中都可能含有若干个属性,且X、Y、Z、U满足$Xcap Y =phi ,Xcap Z=phi ,Y cap Z=phi ,Xcup Y cup Z=U$,即X、Y、Z两两不相交、X、Y、Z之并为U(图上画的很清楚了)。

如果X,Y,Z满足X可以决定Z的值且Y和Z没有任何关系(Y的值变化不会引起Z的值变化),则称Z多值依赖于X,记为$X o o Z$.

多值依赖有以下几个特性:

  1. 对称性
  2. 如上图所示,如果$X o o Z$,则必有$X o o Y$.
  3. 传递性
  4. 如果$Xo o {a},{a} o {a,b,c}$,则$X o o {b,c}$.

1NF

一阶范式(1NF)的定义:关系中每一个分量都不可再分,则这样的关系模式属于第一范式(1NF),即“键值”对中的“值“应该为单个数值,而不是集合。

比如如下关系模式:

b5fd97a857049d7c102a7d3c3eab58d6.png

image-20190626233133946

这样的关系模式就不属于第一范式,因为$A1o{b1,b2,b3}$,b1,b2,b3还可再分,若想将其变为第一范式,则应该:

ce896e157d8c3e52cacf6945c74dce21.png

image-20190626233149436

这时这个关系模式就属于第一范式。

2NF

二阶范式(2NF)的定义:在1NF的基础上,消除关系模式中非主属性对候选码的部分函数依赖后,称该关系模式为2NF。

考虑下表:

7d8e92762daeb9e74482c9423c3fbe4d.png

image-20190626202517264

可以发现,我们通过学生编号就可以确定出来学生姓名、班级编号、学生院系,即:

{学生编号}o {学生姓名,班级编号,学生院系}

我们发现除了这个函数依赖,还有课程编号、成绩这两个属性没有用到,也就是说我们可以得出:

{学生编号,课程编号,成绩}o {学生姓名,班级编号,学生院系}

综合(1)式和(2)式,我们可以得出$学生姓名,班级编号,学生院系{学生姓名,班级编号,学生院系}$部分函数依赖于$学生编号{学生编号}$这个结论,则当前关系模式就不满足2NF的条件,即不属于2NF。

那么我们如何将上述关系模式转化为满足2NF要求的关系模式呢?自然是消除关系模式中非主属性对候选码的部分函数依赖,我们发现,上述关系模式不是2NF的原因在于$学生姓名,班级编号,学生院系{学生姓名,班级编号,学生院系}$部分函数依赖于$学生编号{学生编号}$,再进一步,是因为上述关系模式中出现了课程编号、成绩这两个属性,那么我们将这两个属性单独分离出来即可打破这种部分函数依赖,即将上面拆分为下面两个表格:

学生表:

3338384f5f505c8756f4e2094b7792eb.png

image-20190626203227546

学生-课程表:

5fbfe0c8f469d0659a0961bc6bf376dc.png

image-20190626203245296

这样就消除了关系模式中非主属性对候选码的部分函数依赖,该关系模式就属于2NF了。

3NF

定义:在1NF的基础上消除了非主属性对候选码的传递函数依赖后即满足3NF的要求。

以下表为例:

3338384f5f505c8756f4e2094b7792eb.png

image-20190626203227546

上表中主属性、候选码为学生编号,其他3个属性为非主属性,我们发现根据学生编号可以唯一确定院系,即院系函数依赖于学生编号,但是思考一下,我们是拿到学生编号后就能直接查出来所属院系吗?实际的流程应该是先根据学生编号确定班级编号,然后再根据班级编号确定院系,即从学生编号确定院系这个过程经历了班级编号这一中间属性,即院系是传递函数依赖于学生编号的,所以说,上表是不满足3NF的要求的。

要将一个关系模式转化为3NF,需要消除非主属性对候选码的传递函数依赖,对上表来说就是要消除院系对学生编号的传递函数依赖,那我们直接将院系和学生编号划分到两个表中就可以了,就像这样:

学生表:

a9bfba4e90269230d65841696c48e553.png

image-20190626204050866

班级-院系表:

47b8ea3196cbdc12bf102e5ddb2340ae.png

image-20190626204101596

这样该关系模式中就不存在非主属性对候选码的传递函数依赖了,就满足3NF的要求了。

BCNF

定义:在1NF的基础上,将主属性对候选码的部分函数依赖、传递函数依赖消除后,就满足了BCNF的要求,如果这么说不够明白,我们换种说法,如果每一个函数依赖的决定因素都包含候选码,则满足BCNF的要求,也就是说,对于关系模式中的任意一个函数依赖$Xo Y$,如果X中都含有候选码,则该关系模式属于BCNF。

在理解定义之前我们先明确主属性和候选码的区别,我们说,如果从一个属性集合X出发可以确定所有属性集U中属性的值,就称X为该关系模式的候选码,即候选码是一个集合,而候选码集合中的属性称为主属性。

我们以一个例子来说明BCNF:

关系模式R(U),属性集U={a,b,c},有如下依赖关系:

{a,b} o {c}

{c} o {a}

很明晰在这个关系模式中{a,b}为候选码,a,b为主属性,那么它是否符合BCNF范式的要求呢?我们再看一遍BCNF范式的要求:每一个函数依赖的决定因素都包含候选码

对于第一个函数依赖:${a,b} o {c}$,其决定因素${a,b}$包含了候选码,没有问题;

对于第二个函数依赖:${c} o {a}$,其决定因素是${c}$,可是这个决定因素没有包含候选码即${a,b}$,所以这个函数依赖破坏了BCNF范式的要求。

那么我们如何将上述关系模式转化为满足BCNF范式要求的关系模式呢?方法和之前范式的规范化相同,很明显我们可以将(3)式转化为一张表:

{a,b} o {c}

08d077cf6a4ae8c0cfeb75b73d4cc55c.png

image-20190626233207750

这个关系模式不满足BCNF范式要求的原因在于${c} o {a}$,那么我们可以将上表拆分为两个表,即:

{c} o {a}

ee358239c8e3157f84caff3c86a61c40.png

image-20190626233220744

4NF

定义:在1NF的基础上消除了非平凡且非函数依赖的多值依赖后即满足4NF的要求,再进一步,对于关系模式中的每个非平凡多值依赖的决定因素都包含候选码,则满足4NF的要求,这一点和BCNF范式的要求类似,只是BCNF范式是相对于函数依赖所做的要求,这里是相对于多值依赖所做的要求。

比如现在有关系模式R(U),U={课程,教师,参考书},该关系模式的依赖关系可总结为:

{课程} o {参考书}

{教师} o {教师}

即候选码为{课程}、{教师}。

另外注意,且满足{课程}、{教师}、{参考书}三个子集之交为空、之并为U,这样可以得到:

{课程} stackrel{FF}o {参考书}

{课程}中包含了候选码{课程},所以有{参考书}多值依赖于{课程},即$课程参考书{课程} o o {参考书}$.

而该关系模式中只有上述一个多值依赖,所以该关系模式属于4NF。

规范化总结

  1. 注意各个范式之间的关系:
0e984d632a303912c10460f76a98455c.png
  1. image-20190626224600378
  2. 将一个非xNF转化为xNF的方法是对原有的关系模式进行分解,比如将1个关系模式分解为n个

数据依赖的公理系统

对于一个关系模式R,其属性集为U、函数依赖集为F,如果对其中的任何一个关系r中的两个元组t,s,满足若t[X]=s[X],则t[Y]=s[Y],则称F逻辑蕴含$X o Y$。

可能大家看这个概念比较抽象,我们先来明确两个概念 :

关系:实体与实体之间的联系,在数据表中就是列的组合,比如{学号,姓名,年级}这就是一组关系,描述的是学号、姓名、年级这三个实体之间的联系。

元组: 数据表中每一行就是一个元组,比如{161610000,张三,一年级}这就是上述关系的一个元组

明确了这两个概念之后我们以上述实例来理解一下什么是F逻辑蕴含$X o Y$:对于一张表,有3列,分别为学号、姓名、年级,其函数依赖集为:

$$

F={

{学号} o {姓名}

{学号} o {年级}

}

$$

对于其中的任意两行(记为第t行和第s行),如果第t行和第s行的学号值相同,就有第s行的姓名值和第s行的姓名值相同,则称F逻辑蕴含$学号姓名{学号} o {姓名}$,即函数依赖集F中蕴含的函数依赖为$学号姓名{学号} o {姓名}$。

为了从函数依赖集F中寻找蕴含的函数依赖,比如已知函数依赖集F以及$Xo Y$,问$X o Y$是否为F所蕴含,我们引入一套推理规则,即Armstrong公理系统

设U为属性集总体,F是U上的一组函数依赖,于是有关系模式R,对于R有如下推理规则:

  1. 自反律 :若$Ysubseteq X subseteq U$,则$Xo Y$为F所蕴含
  2. 增广率:若$Xo Y$为F所蕴含,且$Zsubseteq U$,则$Xcup Zo Y cup Z$为F所蕴含
  3. 传递率:若$Xo Y$及$Y o Z$为F锁蕴含,则$Xo Z$为F所蕴含

注意:由自反律得出的函数依赖均是平凡的函数依赖,因为$Ysubseteq X$.

总结

本文我们总结学习了数据库中的关系数据库理论,由于本人太菜,文中可能会出现错误,如有读者发现,请及时联系我修改,不胜感谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值