关系数据库理论

函数依赖:

目录

函数依赖:

关系模式的规范化:

数据依赖公理:


关系数据库的规范化理论是数据库逻辑设计的工具。

关系模式由五部分组成,是一个五元组: R(U, D, DOM, F)
关系名 R 是符号化的元组语义
U 为一组属性
D 为属性组 U 中的属性所来自的域
DOM 为属性到域的映射
F 为属性组 U 上的一组数据依赖
当且仅当 U 上的一个关系 r 满足 F 时, r 称为关系模式 R<U,F>
的一个关系。
作为二维表,关系要符合一个最基本的条件:每个分量必须
是不可分开的数据项。满足了这个条件的关系模式就属于第
一范式( 1NF )。
数据依赖的类型包括:多值依赖(MVD(Multi-Valued Dependency))和函数依赖(FD(Functional Dependency))。
函数依赖的实例:描述一个学生关系,可以有学号,姓名,系名等属性。
一个学号对应一个学生,一个学生只在一个系中学习。
学号确定后,学生的姓名和所在的系被唯一的确定。
Sname=f(Sno) Sdept=f(Sno)
Sno 函数决定 Sname
Sno 函数决定 Sdept
记作 Sno→Sname Sno→Sdept

根据现实世界的已知事实: 

一个系有若干学生, 但一个学生只属于一个系;
一个系只有一名(正职)负责人;
一个学生可以选修多门课程,每门课程有若干学生选修;
每个学生学习每一门课程有一个成绩。
我们可以得到在属性组U上的一组函数依赖F:
F={ Sno→Sdept, Sdept→ Mname, Sno, Cno)→ Grade }
也就是:
看一下我们实例化后的表格:
但是这个学生关系存在以下问题:
1,数据冗余高,系名,系主任名重复出现。
2,更新异常,更新数据付出代价比较大,更换系主任后,所有条目都要更新。
3,插入异常,一个元组在主键的属性上存在空时,该元组无法插入。(一个系刚成立,还没有学生,无法插入)。
4,删除异常,删除了不应被删除的数据(学生全部离去,系主任信息也会被删除)。
显然,这不是我们追求的高效的模式,高效的模式要保证插入,删除,更新正常,而且数据冗余要尽可能少。
我们可以通过分解数据模式来消除其中不合适的数据依赖。
试想:

我们先来解释一下概念:

函数依赖 functional dependency, abbr. FD
设: R A1 A2 …An)=R( U )
X Y U 的不同子集
r R 的任一具体关系
s,t r 的任意两个元组
函数依赖 是完整性约束的一种,它推广了关键字
的概念。 If s[X]=t[X], then s[Y]=t[Y]
函数依赖 :若 R 的任意关系有:对 X 中的每个属性值,
Y 中都有惟一的值与之对应,则称 Y 函数依赖于 X
记作 X ->   Y
函数依赖指的是关系模式R的所有实例都要满足约束条件。
给出例子会方便理解:
这里是函数依赖的有:AB->C,C->A。
为什么A->C,AB->D不是呢?
显然,C不依赖与A,D也不依赖于AB。
对于a1,有c1,c2与之对应,对于a1b1,有d1,d2与之对应,不存在依赖关系。
函数依赖与属性之间的关系:
X Y 1 — 1 关系,
则存在 X ->   Y Y -> X 。如学号与借书证号
X Y m — 1 关系,
则存在 X -> Y Y + > X 。如学号与姓名
X Y m — n 关系,
X Y 间不存在函数依赖关系。如姓名与课程
对于第二种情况,存在Y依赖于X,对于每个X,都有唯一的Y位置对应,而对于每一个Y,存在多个X与之对应,所以X不依赖于Y。
X->Y(Y依赖于X)函数依赖可以分为平凡的函数依赖和非平凡的函数依赖。判断标准是Y是否包含于X。
若Y包含于X,则称X是平凡的函数依赖,若Y不包含于X,则称X是非平凡的函数依赖。

若Y依赖于X(X->Y),则称X为这个函数依赖的决定属性组,也称为决定因素。

完全函数依赖和部分函数依赖:
设X->Y(Y依赖于X)。

左部分为单属性的函数依赖一定是完全函数依赖,左部分为多属性的函数依赖不一定是完全函数依赖。

传递性依赖绝对不存在包含关系。

即整个元组对X形成完全函数依赖。一个X值确定唯一的一个条目。

给出实例方便我们理解:

由于对于任何一个确定的A,有唯一的条目与之对应,所以A是候选键,因为A是候选键,所以A是主属性。由于对于(D,E)属性组,有唯一的A与之对应,所以(D,E)是候选键,因此,DheE是主属性。

下面我们通过例题来判断候选键和主属性:

自反律可以这样证明:A<-->A,所以AB->A。 
要证明谁是候选键,我们只需要证明这个属性或属性组队整个元组都能唯一的决定。即AB->ABCD。
通过主键,我们可以得到主属性,主键是AB,所以主属性是A,B。

关系模式的规范化:

范式是符合某一种级别的关系模式的集合。
关系数据库中的关系必须满足一定的要求。满足 不同
程度要求的为不同范式。
范式的种类:
第一范式 (1NF)
第二范式 (2NF)
第三范式 (3NF)
BC 范式 (BCNF)
第四范式 (4NF)
第五范式 (5NF)
各种范式之间存在联系:
某一关系模式 R 为第 n 范式,
可简记为 R nNF
1NF 2NF 3NF BCNF 4NF 5
NF
一个低一级范式的关系模式,
通过模式分解( schema
decomposition )可以转换为
若干个高一级范式的关系模式
的集合,这种过程就叫规范化
normalization )。
用图来表示如下:

 第一范式:1NF。

定义 4.5:
R 的每个分量都是不可分的数据项,则 R 1NF
从型上看:不存在嵌套结构
从值上看,不存在重复组
第一范式是对关系模式的最起码的要求,不满足第一范式的数据库结构不能被称之为关系数据库。
但是满足第一范式的关系模式并不一定是一个好的关系模式。
例如:  

是1NF关系,但是存在数据冗余,插入异常和删除异常,更新异常的问题。

第二范式: 2NF
定义4.6 若R∈1NF,且R中的每一个非主属性都完全函数依赖于R的
任一候选键,则R∈2NF。
[ ] S-L-C(Sno,Sdept,Sloc,Cno,Grade) Sloc 为学生的住处,
并且每个系的学生住在同一个地方。 S-L-C 的码为 (Sno,Cno)
如果一个关系模式不是2NF,会产生以下问题:
插入异常
如果插入一个新学生,但该生未选课,即该生无 Cno
,由于插入元组时,必须给定码值,因此插入失败。
删除异常
如果 S4 只选了一门课 C3 ,现在他不再选这门课,则删除
C3 后,整个元组的其他信息也被删除了。
修改复杂
如果一个学生选了多门课,则 Sdept Sloc 被存储了多次。如
果该生转系,则需要修改所有相关的 Sdept Sloc ,造成修改的
复杂化。
原因是:Sdept,Sloc部分依赖与码。可以将S-L-C分解为两个关系模式,以消除这些部分函数依赖。
显然,Sdept,Sloc对于(Sno,Cno)是部分函数依赖,对Sno是完全函数依赖。
这样就满足第二范式了。
采用投影分解法将一个1NF的关系分解为多个2NF的关系,可以在一定程度上减轻原1NF关系中存在的插入异常,删除异常,更新异常,数据冗余大,修改复杂等问题,但是不能完全消除。
达到2NF的关系仍然可能存在问题。
例如,在 关系S-L 中还存在以下问题:
(1) 数据冗余。同一个系Sdept,其地址Sloc要重复存
储。
(2) 修改复杂。一个系更换地址时,必须修改相关的多
个元组。
(3) 插入异常。当一个新系成立时,由于还没有一个学
生进来,因缺少主键Sno而不能进行插入操作。
(4) 删除异常。当一个系里的学生毕业以后,会丢失该
系地址。
四、第三范式:
定义4.7 如果关系R的任意一个非主属性都不传递函数依
赖于它的任意一个候选键,则R∈3NF。
即非主属性对候选键不存在函数依赖。
在这张图中,Sloc对Sno是传递依赖,不符合第三范式的条件,因此,这不是第三范式。
我们可以通过破坏传递依赖的条件,来分解第二范式为第三范式。仍然使用投影分解法,将S-L分解为两个关系模式,以消除传递函数依赖。
分解后满足第三范式条件。
显然,一个3NF关系一定是一个2NF关系。(3NF消除传递函数依赖,2NF是完全函数依赖)。
3NF不存在非主属性之间的函数依赖,但是存在主属性之间的函数依赖。(传递函数包含多个依赖,将其中介项作为主属性开辟一个模式,该模式的主属性对原主属性存在函数依赖,非主属性之间不存在函数依赖,否则不满足第三范式中不存在传递依赖的条件)。
判断3NF方法
(1)找候选键,决定非主属性
(2)考察非主属性对候选键的函数依赖是否存在部分
函数依赖,如果存在,则相应的关系模式不是2NF,否则
是2NF。
(3)考察非主属性之间是否存在函数依赖。如果存在
,相应模式不是3NF,否则是3NF。
也可以根据3NF定义,判断是否存在非主属性对候选键
的传递函数依赖。
值得注意的是:如果关系中所有属性都是主属性,则R必定是3NF。
在3NF中,仍然会存在一些问题:
插入异常。例如,一个新课程和任课教师的数据,在没
有学生选课时不能插入数据库。
删除异常。例如,删除某门课的所有选课记录,会丢失
课程与教师的数据。
达到3NF的关系仍然可能存在问题。
可能存在主属性对候选键的部分函数依赖或传递函数
依赖。
BC范式,比3NF更进一步,通常认为BCNF(BC范式)是修正的第三范式,有时也称为扩充的第三范式。
定义如下:
定义4.8 关系模式R<U,F>∈1NF。若函数依赖集合F中的
所有函数依赖X→Y(Y不包含于X)的左部都包含R的任一侯选键,
则R∈BCNF。 换言之, BCNF 中的所有依赖的左部都必须包含候选键
,则R ∈BCNF 。
给个例子:
例:关系 SCT 是否BCNF?
因为tname→cname,其左部未包含该关系的任一侯选键
,所以它不是BCNF。
下面介绍分解为BC范式的方法:
消除不包含关系。
1. 假设 R(U) 不是 BCNF, X R 的属性子集, A R 的单个
属性, X->A 是导致违反 BCNF 的函数依赖,则将 R 分解
R-A 以及 XA
2. R-A 以及 XA 仍然不是 BCNF ,则在 R-A 以及 XA
归地执行上述分解。
所以,上例 就分解成 SC(sno,cname) CT(sno,tname)
BC范式具有的性质:
所有非主属性都完全依赖于每个候选码。
所有主属性都完全依赖于每个不包含它的候选码。
没有任何属性完全依赖于非码的任何一组属性。
 

定理:一个BC范式一定是3NF。
任何二元关系一定是BCNF。

给出一个例子: 

当然,这也满足第1,2范式的条件,非主属性对主属性也是完全依赖关系。

3NF下仍存在插入异常和删除异常,原因在于可能存在主属性对候选键的部分函数依赖和传递函数依赖。
一个模式中的关系模式如果都属于BCNF,则在函数依赖的范畴内实现了彻底的分离,已消除了插入和删除的异常。

第四范式:4NF。

设学校中某一门课程由多个教师讲授,他们使用相同
的一套参考书。每个教员可以讲授多门课程,每种参考书
可以供多门课程使用。
用关系模式 Teaching(C,T,B) 来表示课程 C 、教师 T
和参考书 B 之间的关系。
我们使用非规范化的关系实例表示:
规范化的二维表:
很明显,我们的关系Teaching具有唯一的候选码(C,T,B),即全码。
Teaching属于BC范式。
对于我们的二维表,明显,数据冗余大,增加操作复杂。删除操作复杂。修改操作复杂。

下面我们来看第四范式的定义:

R(U) 是属性集 U 上的一个关系模式。
X , Y , Z U 的子集,并且 Z = U - X - Y 。关系模式 R(U) 中多值依赖X →→ Y 成立,当且仅当对 R(U) 的任一关系 r ,给定的一对 ( x , z ) 值,有一组 Y 的值与之对应,这组值仅仅决定于x 值而与 z 值无关。
显然,对于我们的课程C中的每一个值,T有一组值与之对应,而不论B取何值。因此T多值依赖于C,即C->->T。同理可以分析出C->->B。
看下多值依赖的另外一个定义:
R ( U ) 的任一关系 r 中,如果存在元组 (x,y 1 ,z 1 ) (x,y 2 ,z 2 ) 时,一定存在元组 (x,y 1 ,z 2 ) (x,y 2 ,z 1 ) (即交换两元组的属性Y 上的值所得到的新元组必在 R 中),则称 Y 多值依赖于 X ,或称 X 多值 Y ,记为 X →→ Y 。这里X Y U 的子集, Z = U - X Y
不过我认为例子比概念更能帮助人们理解。
多值依赖的特点:
1. X 的一个值可以决定 Y 的一组值。这种决定关系与 Z 的取值
无关,也就是说当 X 的值确定后,无论 Z 取何值,所得到的 Y
值总是相同的。
2. 多值依赖是全模式的依赖关系。在函数依赖中, X Y 是否
存在函数依赖关系,只须考察 X Y 两组属性,与别的属性无关
。而在多值依赖中, X Y 是否存在多值依赖还须看属性 Z
3. 存在平凡的多值依赖。对于属性集 U 上的一个多值依赖 X
→→Y (X,Y U 的子集),如果 Y X 或者 XY=U ,则称 X
→→Y 是平凡的多值依赖。
多值依赖是元素和集合之间的对应。具有对称性,可以由完全二分图解释。
1 )多值依赖具有 对称性
即若 X→→Y ,则 X→→Z ,其中 Z U X Y
多值依赖的对称性可以用完全二分图直观地表示出来。
从上例容易看出,因为每个保管员保管所有商品,同时每种
商品被所有保管员保管,显然若 W→→S ,必然有 W→→C
2 )多值依赖具有 传递性 。即若 X→→Y Y→→Z , 则
X→→Z–Y X→→Y-Z
3 函数依赖是多值依赖的特殊情况 。即若 X→Y ,则
X→→Y
4 )合并律:若 X→→Y X→→Z ,则 X→→YZ
5 )相交性:若 X→→Y X→→Z ,则 X→→Y∩Z
多值依赖与函数依赖的区别
1 )多值依赖的有效性与属性集的范围有关
X→→Y U 上成立,则在 W XY W U )上 一定成立
;反之则不然,即 X→→Y W W U )上成立,在 U 上并不
一定成立。
原因:多值依赖的定义中不仅涉及属性组 X Y ,而且涉及 U
中其余属性 Z
一般地,在 R(U) 上若有 X→→Y W(W U) 上成立,则称
X→→Y R(U) 的嵌入型多值依赖。
函数依赖 X→Y 的有效性仅决定于 X Y 这两个属性集的值,
只要在 R(U) 的任何一个关系 r 中,元组在 X Y 上的值满足定义
函数依赖的定义 ,则函数依赖 X→Y 在任何属性集 W(XY W
U) 上成立。
2 )若函数依赖 X→Y R (U) 上成立,则对于任何
Y’ Y 均有 X→Y’ 成立。多值依赖 X→→Y 若在 R(U)
成立,不能断言对于任何 Y’ Y X→→Y’ 成立。
解释判断方法:
对于任意一个A,对应BC的值的集合是{(b1,c1),(b2,c2)}
而不管是(b1,c1)还是(b2,c2)对应的集合都是{d1,d2}。
所以A->->BC。
同理,对于任意一个A,对应的D的集合是{d1,d2},不管是d1,还是d2,对应剩余(BC)的集合都是{(b1,c1),(b2,c2)}。
所以A->->D。
反观对于A,B的集合是{b1,b2},而对应于b1的集合是{(c1,d1),(c1,d2)},对应于b2的集合是{(c2,d1),(c2,d2)},很明显,不对等,所以A->->B。是不成立的。
第四范式判断条件:
定义4.10 R(U) 是一个关系模式, D R 上的多
值依赖集合,如果 D 中每个非平凡多值依赖
X->-> Y X 都包含了 R 的一个候选键,则
R 4NF
4NF 就是限制关系模式的属性之间不允许有非平凡且非
函数依赖的多值依赖。
我们来总结一下:
关系的规范化是将一个低级范式的关系模式,通过关
系模式的分解转换为若干个高级范式的过程。
范式的转换过程是通过分析和消除属性间的数据依赖
关系来实现的。
属性可分为键和非主属性。 2NF, 3NF 考察非主属性
和键的关系, BCNF 考察主属性和键的关系。
属性间的依赖关系包括函数依赖和多值依赖。 1NF,
2NF, 3NF, BCNF 考察了函数依赖关系; 4NF 考察了
多值依赖。

数据依赖公理:

阿氏公理(Armstrong):设F是关系模式R的函数依赖集,X,Y是R的属性子集,如果从F的函数依赖中能够推出X->Y,则称F逻辑蕴含X->Y。

我们可以得到阿氏公理的一些性质:

设U为属性集总体,F是U上的一组函数依赖, 于是有关系模式R
<U,F >。对R<U,F> 有:
A1自反律 reflexivity rule ): 若Y X ,则X-> Y。
A2增广律 augmentation rule ): 若X-> Y,则XZ-> YZ。
A3传递律 transitivity rule ): 若X-> Y、Y-> Z,则X-> Z。

由于自反律得到的函数依赖是平凡的函数依赖,自反律的使用并不依赖于F。

当然,我们由以上的推理得到下面的推论:

下面我们进行闭包的计算: 

其实就是得到包含最多属性的列。

我们求出闭包的一个重要作用就是求键,如下:

很明显,A是ABC的键,D是BCD的键,最小属性组AD就是ABCD的键。所以候选键是AD.

 显然,由A我们可以得到包含所有属性列的闭包,由BC也可以得到包含所有属性列的闭包。所以候选键是A和BC。

  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丘小羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值