第四章 关系数据库理论的规范化设计 各种函数依赖

在这里插入图片描述
在这里插入图片描述

数据依赖与函数依赖

在实际应用中,关系中的属性取值并不完全是独立的,相互之间可能有一定的依赖关系,称为数据依赖基本的数据依赖有函数依赖(Functional Dependency, FD)和多值依赖(Multi-value Dependency, MVD
设R〈U〉是属性集U上的关系模式,X、Y是U的子集,若对于R〈U〉的任意一个可能的关系r,r中都不可能存在两个元组s,t使得s[X]=t[X]),而s[Y]≠t[Y],则称属性集X函数确定Y,或Y函数依赖于X,记作 X → Y X→Y XY
 在函数依赖 X → Y X→Y XY中,X称为决定因素(Determinant),Y叫做依赖因素(Dependent)。

函数依赖

对于教学关系模式:R(U,F),U= { 学号, 姓名, 年龄, 性别, 系名, 系主任, 课程名, 成绩 };根据语义, F = { 学号→姓名, 学号→年龄, 学号→性别, 学号→系名,系名→系主任,(学号,课程名)→成绩 }。

设关系模式R(ABCD),在R的关系中,属性值间存在这样的联系:A与B值间是一对多,C与D值间是一对一,由此写出可能的函数依赖。

解:从A与B值间是一对多的联系,可得 B→A。
从C值与D值间的一对一联系,可得 C→D 和 D→C。
如果 X → Y X→Y XY Y → X Y→X YX同时成立,则可记为 X ← → Y X←→Y XY。也就是在关系中,X值和Y值具有一一对应关系,从函数依赖的角度讲,它们等价

在这里插入图片描述

各种函数依赖
  1. 完全依赖:
    通过{学生学号, 选修课程名}可以得到{该生本门选修课程的成绩},
    而通过单独的{学生学号}或者单独的{选修课程名}都无法得到该成绩,
    则说明{该生本门选修课程的成绩}完全依赖于{学生学号,选修课程名}

  2. 部分函数依赖:
    通过{学生学号,课程号}可以得到{该生姓名},而通过单独的{学生学号}已经能够得到{该生姓名},则说明{该生姓名}部分依赖于{学生学号,课程号};
    又比如, 通过{学生学号,课程号}可以得到{课程名称},而通过单独的{课程号}已经能够得到{课程名称},则说明{课程名称}部分依赖于{学生学号,课程号}。(部分依赖会造成数据冗余及各种异常。

3.传递函数依赖:
在关系R(学号,宿舍,费用)中,通过{学号}可以得到{宿舍},通过{宿舍}可以得到{费用},而反之都不成立,则存在传递依赖{学号}->{费用}。(传递依赖也会造成数据冗余及各种异常。)

4.平凡函数依赖
定义:
若X->Y,且Y是X的子集(对任一关系模式,平凡函数依赖必然成立),就是平凡函数依赖
例如:
在学生表(学号,姓名,年级)中,(学号,姓名)可以推出学号和姓名其中的任何一个,这就是平凡函数依赖.
直白点说,就是只要Y是X的子集,Y就依赖于X。

5.非平凡函数依赖
定义:
若X->Y,但Y不是X的子集,就是非平凡函数依赖

例如:
在学生表(学号,姓名,年级)中,通过(学号,姓名)可以推出这个学生所在的年级,但年级不是(学号,姓名)的子集,这是非平凡函数依赖.

6.多值函数依赖:

设R(U)是一个属性集合U上的一个关系模式,X, Y, 和Z是U的子集,并且Z=U-X-Y,多值依赖X->->Y成立当且仅当对R的任一个关系r,r在(X,Z)上的每个值对应一组Y的值,这组值仅仅决定于X值而与Z值无关。

  若X->->Y,而Z=空集,则称X->->Y为平凡的多值依赖。
  否则,称X->->Y为非平凡的多值依赖。

平凡多值依赖就是,属性集合中分为两个真子集,每一个X对应一组Y的取值
可以看出,如果把上面的一组改为一个,那么多值依赖就变成了函数依赖。当然一个值组成的组也是组,所以说,函数依赖是多值依赖的特殊情况。
在这里插入图片描述
表中,U = C+T+B,(C,T)确定一组B,但是这组B其实与T无关,仅由C确定,所以(C,T)->->B。又因为T不是空集,所以(C,T)->->B为非平凡多值依赖

要想消除多值依赖,可以分解为:(C,T), (C,B):

在这里插入图片描述
对于R中的每个非平凡多值依赖X->->Y(Y不属于X),X都含有候选码,则R属于4NF
分析:对于每一个非平凡多值依赖X->->Y,X若含有候选码,也就是X->Y,所以4NF所允许的非平凡多值依赖是函数依赖。


1.第一范式1NF

1NF的定义为:符合1NF的关系中的每个属性都不可再分。
在这里插入图片描述

2.第二范式2NF

在这里插入图片描述

3.第三范式3NF

3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖。

4.BCNF范式

要在 3NF 的基础上消除主属性对于码的部分与传递函数依赖。
在这里插入图片描述

5.第四范式

在这里插入图片描述

总结:

1NF: 字段是最小的的单元不可再分
2NF:满足1NF,表中的字段必须完全依赖于全部主键而非部分主键 (一般我们都会做到)
3NF:满足2NF,非主键外的所有字段必须互不依赖4NF:满足3NF,消除表中的多值依赖

1、存在非主属性对码的部分依赖,如:R(A,B,C),AB为码,B->C,则为1NF
2、存在非主属性对码的传递函数依赖,如:R(A,B,C),A->B,B->C,A为码,则为2NF
3、不存在非主属性对码的部分和传递函数依赖,如R(A,B,C),AB->C,C->B,码为AB和AC,A,B,C均为主属性,为3NFB
4、消除任何属性对码的部分和传递函数依赖,即每个函数依赖的左部都包含码,如R(A,B,C),A->C,A->B,则为BCNF。
4NF:关系中每个非平凡的多值依赖的左部都包含码,即消除非平凡且非函数依赖的多值依赖,如R(A,B,C),A->C,A->B,则为BCNF也为4NF,

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jay_fearless

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

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

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

打赏作者

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

抵扣说明:

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

余额充值