数据库复习11——关系模式与范式

数据库复习


CH11 关系模式与范式

11.1 关系模式的设计

数据库模式(Schema)是数据库中全体数据的逻辑结构和特征的描述,关系型数据库的模式又叫关系模式,我所理解的关系模式就是数据库中表结构的定义以及多张表之间的逻辑联系

关系模式的设计就是根据一个具体的应用,把现实世界中的关系用表的形式来表示的逻辑设计过程,不规范的关系模式设计会带来以下的问题:

  • 数据冗余
  • 更新异常
  • 插入异常
  • 删除异常

举ppt中例子说明四种问题,如下表中描述了老师信息(一个老师一个地址,可以教多门课,一门课只有一名老师):

Tname Addr C#(PK) Cname
T1 A1 C1 N1
T1 A1 C2 N2
T1 A1 C3 N3
T2 A2 C4 N4
T2 A2 C5 N5
T3 A3 C6 N6

- 数据冗余:T1老师的地址A1记录了三次,冗余

- 更新异常:更新了某个元组中T1老师的地址A1,其余两个没有更新,DBMS不会检测到不一致,这是逻辑上的不一致而非数据库不一致

- 插入异常:无法插入一个还未带课的新老师,因为无C#违反主键约束

- 删除异常:T3老师不带C6这门课了,删除元组时却把T3老师的个人信息如地址等删去

解决上述问题最简单的方法是模式分解,将教师信息和课程信息独立出来,下面是一种分解方式:

R(Tname,Addr,C#(PK),Cname)
    =>
    R1(Tname(CK), Addr)
    R2(C#(PK), Cname, Tname(FK))

模式分解有一套规范化的分解标准,称为范式(本章重点,见后续小节)

11.2 函数依赖

函数依赖(Functional Dependency,FD)是指一个关系模式中一个属性集和另一个属性集间的多对一关系,如选课关系SC(S#, C#, Score),给定(S#,C#)只有一个Score对应,不同(S#,C#)对应的Score值允许相等

(1)形式化定义

X、Y是关系模式R(U)属性集U的子集,R(U)的实例r中的两个元组t1、t2,若t1[X]==t2[X]可以导出t1[Y]==t2[Y],则称Y函数依赖于X,记作X→Y

同一个关系模式可以有不同的FD,FD和应用相关;FD是对现实世界的断言,检测FD正确性只能通过考察属性的含义

形式化定义关系模式为R(U, D, dom, F)

  • R为关系模式名
  • U是一个属性集
  • D是U中属性的值所来自的域
  • Dom是属性向域的映射集合
  • F是属性间的依赖关系

关系模式设计就是寻求一个最小FD集T,一旦实现T则可以实现所有FD

(2)函数依赖的平凡性

若X→Y且Y是X的子集,则X→Y是平凡FD(子集必然依赖),否则是称FD不平凡;平凡FD无实际意义,可以通过消除平凡FD来缩小FD集

(3)函数依赖闭包

函数依赖有以下推理规则,称为Armstrong公理:

  • 自反律:若B是A的子集,则A→B
  • 增广律:若A→B,则AC→BC
  • 传递律:若A→B且B→C,则A→C
  • 自含律:A→A
  • 分解律:若A→BC,则A→B且A→C
  • 合并律:若A→B且A→C,则A→BC
  • 复合律:若A→B且C→D,则AC→BD

函数依赖集F逻辑蕴含的函数依赖的全体构成的集合称为函数依赖F的闭包,记做F+,通过一系列推理规则可以求得F的闭包并判断某一函数依赖X→Y是否能够由F推出(即判断X→Y是否属于F+)

(4)属性闭包

判断X→Y是否能够由F推出就去构造F+计算量比较大,其实只需构造**属性X的闭包**X+即可,X+是所有能够用A推出的属性集合(即函数依赖于A的属性集合)

(5)最小函数依赖集

最小函数依赖集F必须满足以下性质:

  • F的每个FD的右边只有一个属性
  • F不可约,即F中的每个X→Y,F-{X→Y}与F不等价
  • F的每个FD的左部不可约,即删除任意FD左边的任何一个属性后的F’不等价于F

求某个函数依赖集的最小函数依赖集的步骤如下:

  1. 分解律让右边无多属性,消除冗余属性
  2. 用推理规则消去左边多属性冗余
  3. 消除剩余冗余FD

11.3 关系模式的分解

关系模式R(U)的一个分解p={Ri(Ui)}满足U=∪{Ui},模式分解必须是无损连接并且需要保持函数依赖

(1)无损连接

无损连接是指:某关系模式的事例r按照关系模式分解成多个关系r1,…,rk,若r1,…,rk的自然连接(Join操作)等于r,则称该模式分解是无损的

(2)测试无损连接

Chase方法能够检测完全的无损连接,设有n个属性的模式R分解为k个模式Ri,有如下Chase过程:

  1. 构造一个k行n列的表格,每行对应一个模式Ri,每列对应一个属性Aj,若Aj在模式Ri中则表格[i][j]中填入aj,否则填入bij
  2. 扫描F中的每个FD X→Y
  3. 若表格中有两行在X分量上相等,在Y分量上不相等则修改Y:若Y的分量中是个是aj,则另一个也修改为aj
  4. 如果没有aj,则用其中一个bij替换另一个符号(i是所有b中最小的行数)
  5. 重复2、3、4一直到表格不能修改为止
  6. 若此时表格中有一行全是a,则该分解是无损连接的分解

当模式分解是简单的二元分解时(即p={R1,R2}),p是无损连接的分解当且仅当下面FD之一成立:

  • R1和R2两模式属性的交集 → R1与R2两模式属性的差集
  • R1和R2两模式属性的交集 → R2与R1两模式属性的差集

(3)保持函数依赖

保持函数依赖是指关系模式R的FD集F在分解后仍在数据库模式中保持不变,这是模式分解的第二个条件

形式化的定义分解后F在模式Ri上的投影为:

πRi(F)={X→Y|X→Y∈F+?X、Y?Ri}

若分解p满足如下条件则称p**保持函数依赖**:

(?i=1kπRi(F))+=F+

11.4 关系模式的范式

范式xNF即是满足特定要求的模式,将低一级范式的关系模式通过模式分解转换为高一级范式的关系模式集合的过程叫做规范化

范式从低级到高级依次为:1NF、2NF、3NF、BCNF、4NF、5NF,高一级的范式总是低一级范式的真子集

根据关系模式R的不可约FD集F,可以画出节点是属性或属性集,边是由被依赖节点指向依赖节点的有向图来辅助分析关系模式,叫做函数依赖图

注:复习时间关系ppt中范式的例子来不及整理了

(1)1NF

1NF要求关系模式R的每一个实例r均满足:r中的每一个元组t的每一个属性中只有一个值,这是关系模式的基本要求

不满足1NF的关系模式有二义性!

(2)2NF

假定:R只有一个候选码,且该候选码为主码

R∈1NF且R的每一个非主属性(非候选码的其他属性)都完全函数依赖于主码时,R∈2NF

A完全依赖于W是指:W→A且A不依赖于任何一个W的真子集X,W是主键也可能包括多个属性{X、Y},非主属性A不能局部函数依赖于X或Y

不满足2NF的关系模式可能存在[插入异常、删除异常、更新异常和数据冗余],通过画出函数依赖图无损分解非2NF得到2NF,但2NF也不能完全消除上述问题

(3)3NF

假定:R只有一个候选码,且该候选码为主码

R∈2NF且R的每一个非主属性都不传递依赖于主码时,R∈3NF

A传递依赖于Y则有:Y→X,X→A,并且Y不依赖于X(即Y不等于X)、A不是X的子集

不满足3NF的关系模式也可能存在[插入异常、删除异常、更新异常和数据冗余],通过打破传递依赖链条,把关系模式分解成多个子关系模式

(4)BCNF

BCNF是3NF处理R有多个候选码的扩展,当R有多个候选码时即使R∈3NF,也可能出现[插入异常、删除异常、更新异常和数据冗余],这时需要分解为BCNF范式

如果关系模式R的所有不平凡的、完全的函数依赖的决定因素(左边的属性集)都是候选码,则R∈BCNF

若要求保持函数依赖和无损联接,则总可以达到3NF,但不一定满足BCNF;因为BCNF可以达到无损连接,但不一定保持函数依赖

11.5 关系模式分解为范式的分解算法

(1)保持函数依赖地分解R到3NF

算法步骤:

  1. 求出R的最小函数依赖集F
  2. 把所有不在F中出现的属性组成一个关系模式R’,并在U中去掉这些属性
  3. 若F中存在X→A且XA=U,则算法结束输出{R’,R(U)},否则继续下一步
  4. 对F中的FD按相同的左部分组构成一个关系模式Ri(Ui),Ui包括了该组FD涉及的所有属性
  5. 去掉{Ri(Ui)}中属性集Ui是其他某个关系模式属性集Uj子集的关系模式Ri,得到最终的分解p={R1,R2,…,Rk,R’},p能够保持函数依赖地把R分解到3NF

(2)无损连接且保持函数依赖地分解R到3NF

算法步骤:

  1. 按算法(1)中步骤求出保持函数依赖的3NF分解,设q={R1,R2,…,Rk}
  2. 设X是R的主码,p={R1,R2,…,Rk,R(X)}
  3. 若X是q中某个Ri(Ui)属性集Ui的子集,则删除p中的R(X)
  4. 输出p,p能够无损连接且保持函数依赖地把R分解到3NF

(3)无损联接地分解R到BCNF

算法步骤:

  1. p={R}
  2. 检查p中各关系模式是否满足BCNF,是则终止输出p
  3. 设p中S(Us)非BCNF,则必存在X→A且X不是S的候选码:S分解为S1(XA)和S2(Us-A),把p中的S替换为S1、S2,跳转至第二步

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-09 15:22:38

数据库复习11——关系模式与范式的相关文章

数据库复习9——关系代数和关系演算

数据库复习 CH8 关系代数 8.1 关系代数 关系代数是SQL之外还有一种描写叙述数据库操作的形式化语言,关系变量(表)是关系代数中的基本表达式 关系代数三个重要的形式化定义例如以下: σF(E):E一个表达式(基本表达式或表达式中间结果).F是关于E中属性的断言,相当于where从句中限制条件(Restrict操作) ΠA(E):E一个表达式,A是E属性的子集,相当于select从句(Projection操作) ρX(E):E一个表达式,X是E表达式结果的重命名 8.2 关系代数操作符 (1

数据库复习之规范化理论

声明:本文为作者复习数据库课程时简单记录的笔记,如有错误之处,敬请指出,谢谢. 6.1问题的提出 1.一个关系模式是一个五元组,形如R(U,D,DOM,F).其中D.DOM与模式设计关系不大,可以看作三元组R<U,F>. 关系名R是符号化的元组定义: U为一组属性: D为属性组U中的属性所来自的域: DOM为属性到域的映射: F为属性组U上的一组数据依赖. 2.数据依赖:一个关系内部属性与属性之间的一种约束关系.最重要的是函数依赖(FD)和多值依赖(MVD),还有一个叫连接依赖. 3.分析关系

数据库复习之规范化理论应用(第八次上机内容)

声明:本文为作者复习数据库课程时简单记录的笔记,如有错误之处,敬请指出,谢谢. 一.理论基础 1.无损连接性(Lossless Join):设关系模式R(U,F)被分解为若干个关系模式R1(U1,F1),R2(U2,F2),…, Rn(Un,Fn),其中U=U1U2…Un,且不存在UnUj式,Fi为F在Uj上的投影,如果R与R1,R2,…,Rn自然连接的结果相等,则称关系模式R的分解具有无损连接性. (上面别看了,看下面!) 简单来说,就是如果对分解后的新关系进行自然连接得到的元组的集合与原关系

数据库 之 关系模式范式

主要有6种范式:第一范式(1NF),第二范式(2NF),第三范式(3NF),巴德斯科范式(BCNF),第四范式(4NF),第五范式(5NF),按从左至右的顺序一种比一种要求更严格.要符合某一种范式必须也满足它前边的所有范式.一般项目的数据库设计达到3NF就可以了,而且可根据具体情况适当增加冗余,不必教条地遵守所谓规范. 从范式所允许的函数依赖方面进行比较,四种范式之间的关联如下图所示. 1.第一范式(1NF)无重复的列 所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中

关系模式范式分解教程 3NF与BCNF口诀

https://blog.csdn.net/sumaliqinghua/article/details/86246762 [通俗易懂]关系模式范式分解教程 3NF与BCNF口诀!小白也能看懂原创置顶 沃兹基.硕德 最后发布于2019-01-10 18:26:14 阅读数 13082 收藏展开本来是为了复习数据库期末考试,结果找了一圈都没有发现比较好的解释,通过查阅资料和总结,为大家提供通俗易懂的解法,一听就会!并且配有速记口诀!介是你没有玩过的船新版本包含最小依赖集求法候选码求法 在模式分解之前

关系型数据库:关系模式设计原则

1.范式与数据冗余度从0NF到1NF.2NF.3NF.BCNF.4NF.5NF?数据库设计的过程是个拆分表的过程,拆分的目的是降低数据的冗余度. 数据的冗余度越低,事务持续时间就越短(它不需要额外的操作去维持数据一致性和完整性).与此同时,拆得越细,查询的代价越高(需要更多耗时的连接运算). 2.关系模式的设计原则 如果表(集)主要用于数据更新(Online),表的分解就应该尽可能接近3NF, BCNF从前面的例子看没有必要,至于4NF.5NF更多属于理论研究领域,在实际应 用中无此必要. 如果

ER 和 数据库关系模式

http://lianghuanyue123.blog.163.com/blog/static/130423244201162011850600/ 我们眼下所接触的数据库基本上是关系数据库,关系数据库中的关系模式是型,而关系是值.关系模式是对关系的描写叙述. 什么是关系?关系实质上是一张二维表,当中每一行是一个元组,每一列是一个属性,每一个元组是该关系涉及到属性集合笛卡尔积的一个元素.(笛卡尔积是这种一个集合.集合中的元素是有序对,若A={0,1}B={a,b}则:A*B={<0,a>,<

数据库 - 关系模式函数依赖

关系数据库逻辑设计 针对具体问题,如何构造一个适合于它的数据模式 数据库逻辑设计的工具──关系数据库的规范化理论 关系模式由五部分组成,即它是一个五元组: R(U, D, DOM, F) R: 关系名 U: 组成该关系的属性名集合 D: 属性组U中属性所来自的域 DOM: 属性向域的映象集合 F: 属性间数据的依赖关系集合 数据依赖 一个关系内部属性与属性之间的约束关系 现实世界属性间相互联系的抽象 数据内在的性质 语义的体现 2. 数据依赖的类型 函数依赖(Functional Depende

数据库复习要点

本文根据华南理工大学软件学院<数据库系统>课程及相关教材<数据库系统概念>总结,作复习回顾用. 内容涵盖考试范围,最多到第十四章. Chapter. 1 引言 数据库管理系统(database-management system, DBMS)由一个互相关联的数据的集合和一组用以访问这些数据的程序组成,这个数据集合通常被称为数据库(database).DBMS的主要目标是提供一种可以方便.高效地存取数据库信息的途径. 设计数据库系统的目的:为了管理大量信息. 文件处理系统(file-