【数据库原理与应用 - 第四章】关系数据库规范化理论

本文详细介绍了关系模式规范化理论,包括数据冗余、插入和删除异常等问题,以及规范化的目的。函数依赖的概念、分类和性质被深入探讨,如平凡与非平凡函数依赖、完全和部分函数依赖。同时,文章阐述了不同范式(1NF到4NF)的定义和重要性,以及如何通过函数依赖的公理系统求解候选码和最小函数依赖集。最后,提到了关系模式的分解方法。
摘要由CSDN通过智能技术生成

目录

一、关系模式规范化理论

1、关系模式规范化概念

2、关系模式应满足的基本要求

3、关系规范化的意义

(1)一个好的数据库应遵循的标准

(2)规范化的意义

二、函数依赖

1、函数依赖的概念

(1)平凡、非平凡函数依赖  

(2)如何判断函数依赖?

2、函数依赖的分类

(1)完全函数依赖

(2)部分函数依赖

(3)传递函数依赖 

3、码

(1)主码、主属性、非主属性

(2)码的性质

三、关系范式

 1、范式的分类

(1)第一范式 1NF

(2)第二范式 2NF 

(3)第三范式 3NF

(4)BCNF

(5)多值依赖及4NF

四、函数依赖的公理系统

1、求候选码的方法

(1)属性分类

(2)闭包运算

2、求最小函数依赖集的方法

(1)函数依赖集等价

五、关系模式的分解

六、课后习题


一、关系模式规范化理论

1、关系模式规范化概念

  • 关系规范化理论是解决关系数据库中数据冗余大、插入、删除等异常问题

解决的问题:

① 数据冗余大

② 插入异常 —— 该插入的数据未被插入

③ 删除异常 —— 不该删除的数据被删除

④ 更新异常

  • 关系数据库的规范化理论主要解决的问题是:如何构造合理的数据逻辑结构

2、关系模式应满足的基本要求

  • 元组的每个分量必是不可分割的数据项
  • 数据冗余尽可能少
  • 不产生插入异常现象
  • 不产生删除异常现象
  • 不会因数据更新而引起数据不一致问题
  • 数据组织要合理

3、关系规范化的意义

(1)一个好的数据库应遵循的标准

  • 每个表都应提供一个唯一标识,用于区别不同的行
  • 每个表应存储单个实体类型的数据
  • 每个表不应该出现值全部相同的行、列
  • 尽量避免出现null值的列
  • 尽量避免值重复储存

(2)规范化的意义

  • 把关系中的每一个数据项都转换成一个最小的数据项,即不可再分的数据项
  • 消除冗余,并使关系检索得到简化
  • 消除数据在进行插入、删除和修改时的异常情况
  • 关系模型灵活,易于使用非过程化的高级查询语言进行查询

二、函数依赖

1、函数依赖的概念

设R(U)是一个属性集U上的关系模式,X和Y是U的子集

若对于R(U)的任意一个可能的关系r

r中任意两个元组u、v

只要有u[X]=v[X],就有u[Y]=v[Y]

则称 X函数确定Y 或 Y函数依赖于X,记作X→Y

X称为决定属性集,Y称为依赖因素

注:函数依赖指R中所有关系均要满足的约束条件

【例1】学生(学号,姓名,性别,年龄,系名) 假设不重名

学号→姓名  学号→性别  学号→年龄  学号→系名

对于学号→姓名,若某俩元组学号相同,则俩元组对应的姓名必然相同

(1)平凡、非平凡函数依赖  

  • X→Y,但 Y\nsubseteq X,则称X→Y是非平凡的函数依赖
  • X→Y,但 Y\subseteq X,则称X→Y是平凡的函数依赖
  • 若X→Y、Y→X,则X与Y相互依赖,记为X\leftrightarrow Y
  • 若Y不函数依赖于X,则记为X \nrightarrow Y

(2)如何判断函数依赖?

  • 如果两属性集X、Y间是1:1联系,则存在函数依赖X\leftrightarrow Y
  • 例如:课程关系中如果课程号和课程名都是唯一的,则有课程号\leftrightarrow课程名
  • QQ用户关系模式中,如果不允许同名用户存在,则有QQ号\leftrightarrowQQ用户名

  • 如果两属性集X、Y之间是N:1联系,则存在函数依赖X→Y
  • 例如:读者关系模式中,读者卡号→单位,即不同的读者来自于相同的单位

  • 如果两属性集X、Y间是M:N联系,则不存在函数依赖
  • 例如:读者姓名和办卡日期,多个读者办卡日期是相同的,而同一个办卡日期对应多个不同的读者,因此读者姓名和办卡日期之间是M:N联系,不存在函数依赖

2、函数依赖的分类

(1)完全函数依赖

        设R(U)是属性集U上的关系,X′是X的真子集,如果X→Y,并且对于X的任何一个真子集X′,都不存在X'→Y,则称Y对X完全函数依赖,记为X\overset{f}{\rightarrow}Y

  • 例如:X(读者卡号,图书编号)\overset{f}{\rightarrow}借书日期
  • X' 读者卡号\nrightarrow借书日期:一个读者对应不同借书日期,一个借书日期有多个读者借阅
  • X' 图书编号\nrightarrow借书日期:一个图书编号对应不同借书日期,一个借书日期会借出多种书

决定因素只含单个属性的函数依赖必为完全函数依赖

(2)部分函数依赖

        设R(U)是属性集U上的关系,X′是X的真子集,如果X→Y,并且对于X的任何一个真子集X',都存在X→Y,则称Y对X部分函数依赖,也就是Y不完全函数依赖于X,记为X\overset{p}{\rightarrow}Y 

  • 例如:X(供应商编号,商品号)\overset{p}{\rightarrow}供应商名
  • X' 供应商编号→供应商名:1:1关系
  • X' 商品号→供应商名:不同的商品号对应一个供应商

决定因素包含两个及以上属性的函数依赖才可能存在部分函数依赖

(3)传递函数依赖 

  在R(U)中,X、Y、Z是U的子集,如果X→Y、(Y\nsubseteqX)、Y→Z、Y→X不成立,则称Z对X传递函数依赖,记为X\overset{t}{\rightarrow}Y
需要注意的是: 
        如果Y→X成立,而X→Y,则Z直接依赖于X
        如果Y⊆X,则Z直接依赖于X

  • 例如:商品号→产地,产地→主负责人,商品号\overset{t}{\rightarrow}主负责人
  • 学号→学院名称,学院名称→院长,学号\overset{t}{\rightarrow}院长

3、码

        设k为R(U,F)中的属性和属性组合,k'是k的真子集,若k→U,且不存在 k'→U成立,则k为R的候选码,简称为码

(1)主码、主属性、非主属性

  • 若候选码多于一个,则选定其中的一个为主码
  • 主属性:包含在任何一个候选码中的属性
  • 非主属性:不包含在任何候选码中的属性

(2)码的性质

  • 决定性(标识的唯一性):对于R中的每一个元组,k值确定后,该元组就确定了
  • 最小性(无冗余性):当k是属性集合时,k的任何一部分都不能标识该元组

三、关系范式

 1、范式的分类

(1)第一范式 1NF

1NF:在一个关系模式R中,如果R的每一个属性都是不可再分的数据项,则称R属于第一范式(1NF),记为R∈1NF


例如,下面职工和部门关系模式由于存在属性再分的情况,因此不是第一范式

  • 职工(职工编号,姓名,工资(基本工资,补贴,奖金))
  • 部门(部门编号,部门名称,负责人(正负责人,副负责人))

转化的方法比较简单,只需要去掉组合项就行

例如上述两个非规范的关系模式可以转化为如下的1NF的关系模式

  • 职工(职工编号,姓名,基本工资,补贴,奖金)
  • 部门(部门编号,部门名称,正负责人,副负责人)

(2)第二范式 2NF 

2NF:如果一个关系R属于1NF,且它的每一个非主属性都完全依赖于码,则称R属于第二范式(2NF),记为R∈2NF

  • 读者姓名、性别、单位等非主属性只依赖于读者卡号,而与图书编号没有关系
  • 书名、作者、出版社名称、地址只依赖于“码”的一部分图书编号,不依赖于读者卡号
  • 存在着诸如(读者卡号,图书编号)\overset{p}{\rightarrow}姓名,(读者卡号,图书编号)\overset{p}{\rightarrow}出版社名称 的部分函数依赖,因此不满足2NF条件
     

根据2NF的定义,将“图书管理”关系模式分解成满足2NF的关系模式集合如下:

  • 读者(读者卡号,姓名,性别,单位,办卡日期)
  • 图书(图书编号,书名,类别,作者,单价,出版社,地址)
  • 借阅(读者卡号,图书编号,借书日期,还书日期)


推论:如果关系模式R满足1NF,且它的每一个候选码都是单属性,则R属于2NF

(3)第三范式 3NF

3NF:如果一个关系模式R满足2NF,并且每个非主属性都不传递函数依赖于码,则R属于第三范式,记为R∈3NF

  • 在图书(图书编号,书名,类别,作者,单价,出版社,地址)中
  • 图书编号→出版社,出版社→地址,存在图书编号\overset{t}{\rightarrow}地址
  • 存在传递依赖,不满足3NF要求


对图书关系按3NF的要求进行分解,则分解后的关系模式为: 

  • 图书(图书编号,书名,类别,作者,单价,出版社)
  • 出版社(出版社名称,地址)

  • 推论1:如果一个关系模式R满足1NF,并且它的每一个非主属性既不部分依赖于码,也不传递依赖于任何候选码,则R属于3NF

  • 推论2:如果一个关系模式R不存在非主属性,则R一定为3NF

(4)BCNF

BCNF:R属于1NF,且每个属性主属性和非主属性)都不部分依赖和传递依赖于码,则R属于BCNF

  • R(学号课程号课程名,成绩)
  • 码有(学号,课程号),(学号,课程名)
  • 主属性 (学号,课程号)\overset{p}{\rightarrow}课程名,(学号,课程名)\overset{p}{\rightarrow}课程号
  • 不存在非主属性成绩对码的部分依赖和传递依赖
  • 因此R满足3NF,而不满足BCNF

根据BCNF定义,将R分解成BCNF关系模式如下:

  • 课程(课程号,课程名)
  • 选课(学号,课程号,成绩)

  • 对比3NF,BCNF既要检查主属性,还要检查非主属性
  • 若满足BCNF,必然满足3NF
  • 所有非主属性对每一个码都完全函数依赖
  • 所有主属性对每个不包含它的码都完全依赖
  • 没有任何属性完全函数依赖于非码的任何一组属性

【例1】假设高校图书管理数据库有关系模式:职工管理图书(仓库号,图书类别编号,职工号)。其中包含的语义为:一个仓库可以有多个职工;一名职工仅管理一个仓库;每个仓库的每类图书仅由一名职工负责(但每名职工可以负责不同类别的图书),判断此关系模式属于第几范式。
根据语义可以得到此关系模式的函数依赖:

  • 职工号→仓库号
  • (仓库号,图书类别编号)→职工号

由码定义中应满足的两个条件可以确定该关系模式的码是(仓库号,图书类别编号)

  • 非主属性:职工号
  • 主属性:仓库号,图书类别编号

根据3NF的定义:不存在非主属性对码的部分依赖和传递函数依赖,所以此关系模式属于3NF,又因为存在主属性仓库号对非主属性职工号的完全依赖,即职工号→仓库号,据BCNF 的定义,此关系模式不属于BCNF。

(5)多值依赖及4NF

① 多值依赖的定义

        设关系模式R(U),U是属性集,X、Y、Z是U的子集。如果R的任一关系r,在(X,Z)上的每一个值,都有一组Y值与之对应,且Y值仅取决于X值,而不取决于Z值,则称Y多值依赖于X,记为X→→Y

  • 若X→→Y,而Z=\phi,则X→→Y称为平凡的多值依赖
  • 若X→→Y,而Z≠\phi,则X→→Y称为非平凡的多值依赖
课程C教师T参考书B
数据库王武数据库应用及原理
计算机网络黎明计算机网络应用
计算机组成陈莉计算机组成原理

课程C和教师T唯一确定一组B,B却与T无关,经由C决定,然而T并不是空集,所以是非平凡的多值依赖,C→→B

如何判断多值依赖?

X值相同,将Z值交换生成新的元组仍在关系中,则称X→→Y

XYZ
xy1z1    ↓
xy2z2    ↑
xy1z2
xy2z1

② 多值依赖的性质

  • 多值依赖有对称性:若X→→Y,则有X→→Z,其中Z=U-X-Y
  • 多值依赖有传递性:若X→→Y,Y→→Z,则有X→→Z-Y
  • 函数依赖是多值依赖的特殊情况:若X→Y,则X→→Y
  • 若X→→Y,X→→Z,则
  1. X→→Y\cap Z
  2. X→→Y\cup Z
  3. X→→Y-Z
  4. X→→Z-Y

③ 多值依赖与函数依赖的区别

有效性、包含性

④ 4NF

消除表中的多值依赖

【例2】设有一个记录各个球队队员每场比赛进球数的关系模式R( 队员编号,比赛场次,进球数,球队名,队长名),如果规定每个队员只能属于一个球队,每个球队只有一个队长。
        (1)试写出关系模式R的基本函数依赖和关键码。
        (2)说明R不是2NF模式的理由,并把R分解成2NF模式集。
        (3)进而把R分解成3NF模式集,并说明理由。

(1)每个队员只能属于一个球队:队员编号→球队名

每个球队只有一个队长:球队名→队长名
每个队员每场比赛只有一个进球数,这条规则也是成立的:(队员编号,比赛场次)→进球数
从上述三个函数依赖可知道,R的码为(队员编号,比赛场次)

(2)解:(队员编号,比赛场次)→(球队名,队长名)
队员编号→球队名

球队名→队长名
显然,其中第一个函数依赖是一个局部依赖,因此R不是2NF模式


对R应该进行分解:

  • R1(队员编号,球队名,队长名)
  • R2(队员编号,比赛场次,进球数)

(3)解:R2(队员编号,比赛场次,进球数)中:(队员编号,比赛场次)→进球数,码为(队员编号,比赛场次),可见R2已是3NF模式
R1(队员编号,球队名,队长名)中:队员编号→球队名,球队名→队长名
可见存在传递依赖,因此R1不是3NF模式
对R1应分解成两个模式:

  • R11(队员编号,球队名)
  • R12(球队名,队长名)
  • R2(队员编号,比赛场次,进球数)

四、函数依赖的公理系统

1、求候选码的方法

  1. 属性分类:对关系中属性进行分类(四大类)
  2. 闭包运算:对确定的属性求闭包,若不能构成候选码,再将确定的属性(L类、N类)和待定的属性(LR类)进行组合,做闭包运算,直到得到的属性组能够推出全部属性

(1)属性分类

  • L类属性只出现在左边的属性
  • R类属性:只出现在右边的属性
  • LR类属性:在左右均出现的属性
  • N类属性没有在F中出现的属性

  • 一定属于候选码的属性:只出现在左边,或左右都没有出现过,L类或N类
  • 可能属于候选码的属性:左右都出现过,LR类
  • 不属于候选码的属性:只在右边出现过,R类

(2)闭包运算

(X)_{F}^{+}=U则X为候选码

X\rightarrow Y\Leftrightarrow Y\subseteq X_{F}^{+}

 

【例1】集合U={A,B,C,D,E,G},函数依赖集F={AB→C,CD→E,E→A,A→G},求U的所有候选码

U中L属性:B、D,LR属性:A、C、E

(BD)_{F}^{+}=BD\neq U

(ABD)_{F}^{+}=ABCDEG=U,所以ABD是候选码

(CBD)_{F}^{+}=ABCDEG=U,所以CBD是候选码

(EBD)_{F}^{+}=ABCDEG=U,所以EBD是候选码

所以R的所有候选码为ABD、CBD、EBD

【例2】设R(A,B,C,D,E,F),G={AB→E,AC→F,AD→B,B→C,C→D},求R的所有候选码

R中L属性:A,LR属性:B、C、D

A_{F}^{+}=A\neq U

(AB)_{F}^{+}=ABCDEF=U,所以AB是候选码

(AC)_{F}^{+}=ABCDEF=U,所以AC是候选码

(AD)_{F}^{+}=ABCDEF=U,所以AD是候选码

所以R的所有候选码为AB、AC、AD

2、求最小函数依赖集的方法

(1)函数依赖集等价

F^{+}=G^{+}\Leftrightarrow F\subseteq G^{+},G\subseteq F^{+}

  • 拆分右侧:将A→BC拆为A→B,A→C
  • 去除自身求闭包:若有AB→C,BC→E,AE→G,如果去除AB→C这个关系,通过剩余的关系求出(AB)_{F}^{+}也能推出C,则可以删去AB→C
  • 左侧最小化:例如ABC→D,观察ABC中,A是否能由BC推出,B是否能由AC推出,C是否能由AB推出。假设C能被AB推出,左侧删去C,变成AB→D

【例1】设F={C→A,CG→BD,CE→A,ACD→B} ,求最小函数依赖集

  • 将CG→BD拆分为CG→B和CG→D

  • 去除C→A:(C)_{F}^{+}=C,无法推出A,保留C→A
  • 去除CG→B:(CG)_{F}^{+}=CGADB,可以推出B,删去CG→B
  • 去除CG→B:(CG)_{F}^{+}=CGAB,无法推出D,保留CG→D
  • 去除CE→A:(CE)_{F}^{+}=CEA,可以推出A,去除CE→A
  • 去除ACD→B:(ACD)_{F}^{+}=ACD,无法推出B,保留ACD→B
  • 现在剩下:{C→A,CG→D,ACD→B}

  • C→A已经最小
  • CG→D,C不能推G,G不能推C,因此也是最小
  • ACD→B,C可以推出A,去掉A

本题的最小函数依赖集为{C→A,CG→D,CD→B}

五、关系模式的分解

六、课后习题

 

 

 

 

 

  • 20
    点赞
  • 178
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值