第9章 关系模式的规范化设计理论

9.1 问题提出

例:教学关系描述如下

  • 一个学生(学号,姓名)只有一个学号,一门课程(课程号,课程名),只有一个课程号
  • 每一位学生选修的每一门课程都有一个成绩
  • 每一门课程只有一位教师任教,但一个教师可以担任多门课程
  • 教师没有重名,每一位教师只属于一个系

建立的关系如下

关系模式可能存在的异常

冗余过多

  • 如:学生的姓名、课程的名称有很多重复值

插入异常

  • 如:新增加的学生,如果还没有选课,将无法将信息插入到表中

更新异常

  • 如:许红霞老师上的课要转给其他教师上时,在更新时很容易出现错误

删除异常

  • 如:有一门课程因为选课人数不够,需要取消,则在删除该门课程的选课信息的同时,这门课程的信息(课程号,课程名)也将一并被删除;同样,如果一位教师退休,要删除该位教师的信息,则这位教师的相关授课信息也将被删除

异常原因分析

根本原因

  • 关系的结构。在关系模式的结构中,属性之间存在过多的"数据依赖"。

数据依赖

  • 指一个关系中属性值之间的相互联系,它是现实世界属性间相互联系的体现,是数据之间的内在性质,是语义的体现。

常见的数据依赖有

  • 函数依赖
  • 多值依赖

例题

异常问题的解决

  • 对关系模式进行分解。先分析和掌握属性间的语义关联,然后再依据这些关联得到相应的设计方案。

9.2 关系模式的函数依赖

函数依赖的一般概念

定义1

  • 小写字母r表示关系模式R(U)的对应的具体关系(当前基本表的状态)

  • 注意:R(U)的一切具体关系r都要满足函数依赖的约束条件

例题

函数依赖的一般概念

  • 几个常用的术语和记号

定义2

定义3

候选键与主键

定义4

定义5

定义6

9.3 关系模式的规范化

如何构造一个合适于现实世界具体问题的数据库模式?

  • E.F.Codd在1977年提出了关系数据库规范化理论,主要研究关系模式中属性之间的相互依赖关系,以及对关系模式性能的影响,一个"好"的关系模式应当具备的性能,以及如何设计一个好的关系模式的设计方法。
  • 关系模式的规范化理论为我们提供了判断关系模式优劣的理论标准。

范式

  • 即正规公式,是符合某一种级别的关系模式的集合。
  • 满足不同程度要求的为不同范式。
  • 关系模式R满足第i范式要求,就可以写成
  • 一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。

第一范式

定义7

  • 如果一个关系模式R(U)的所有属性都是不可再分的基本数据项,则称R(U)为第一范式,即

一般而言,每一个关系模式都必须满足1NF,这是对每一个关系最基本的要求。

第一范式

  • 属性是否可以再分,取决于这个属性在实际问题中的重要程度。
  • 但是,第一范式通常存在数据冗余过多、删除异常和插入异常等问题。

第二范式

定义8

  • ,且每一个非主属性完全函数依赖于每个候选键,称R(U)为第二范式,即


非2NF关系模式所引起的问题

  • 插入异常
    • 如:要插入一个学生Sno='20090101',Sdept='cs',Sloc='181-326',该元组不能插入。
  • 删除异常
    • 如:某学生20090101只选一门C06号课,现在他不选了,则必须删除整个元组,学生的信息也丢失了。
  • 修改复杂
    • 如:某学生从计算机系cs转到数学系ma,则必须同时修改该生的住处,且若该生选修了n门课,则需修改多个元组中的值。

非2NF关系模式的转换

  • 方法:将关系模式进行分解。用投影分解把原关系模式R分解为两个或多个关系模式。

注意:

  • 将一个1NF的关系分解为多个2NF的关系,并不能完全消除关系模式中的各种异常情况和数据冗余。
    • 例:新建的宿舍,还没有学生入住,则宿舍的信息就无法输入;某课程,没有学生选修,也无法输入。

第三范式

定义9

非3NF关系模式所引起的问题

  • 插入异常、删除异常、冗余度大等问题

非3NF关系模式的转换

  • 模式分解

例题

  • 设有关系模式SCT(U)=(学号Sno,课程号Cno,教师姓名Tname),语义如下:(1)每位教师不重名;(2)每位教师仅上一门课;(3)每门课程可由若干教师讲授;(4)学生选定某门课程后,教师即唯一确定

  • 函数依赖集F如下:

  • F={(Sno, Cno)-->Tname, (Sno,Tname)-->Cno,Tname-->Cno}

BC范式

  • 若关系模式R(U)EBCNF,则以下结论成立。
    • R(U)的所有非主属性都完全函数依赖于每一个候选键,因此

    • R(U)的所有主属性都完全函数依赖于不包含它的候选键。

    • R(U)中没有属性完全函数依赖于任何一组非候选键属性。

  • 定理1

    • ,则

  • 大多数情况下,3NF都是BCNF
  • 3NF可能违反BCNF的两种情况
    • 关系中包含两个(或更多)联合候选键
    • 候选键有重叠,通常至少有一个重叠的属性
    • 例:(学号,课程号),(学号,教师姓名)
  • 定理2
    • 如果

      且R(U)有唯一候选键X,则必有

  • BCNF是在函数依赖条件下对模式分解所能达到的最高分离程度。
  • 3NF与BCNF的区别
    • 对一个函数依赖A一>B,3NF允许B是主属性,而A不是候选键。而BCNF则要求在这个依赖中,A必须是候选键。
    • 当3NF消除了主属性对候选键的部分和传递函数依赖时,则成为BCNF。
  • 注意:
    • 在任何情况下都将所有关系转化为BCNTF并不一定是最佳的,因为在对关系进行分解时,有可能会丢失一些函数依赖。所以,是否要规范化到BCNF,取决于产生的数据冗余量与函数依赖的丢失造成的影响哪个更重要

多值依赖

定义11

  • 设R(U)是属性集U上的一个关系模式,X,Y,Z是U的子集,并且Z=U一X一Y。若对于R(U)的任一具体关系r,r在属性(X,Z)上的每一个值,就有属性Y上的一组值与之对应,且这组值仅仅决定于X上的值而与Z上的值无关,则称Y多值依赖于X,记作X一>一>Y。

关系模式规范化步骤

9.4 函数依赖的推理规则

函数依赖的逻辑蕴含

定义12

注意

X->Y不一定属于F

定义13

通常

Armstrong公理系统

属性的闭包

Armstrong公理系统

属性的闭包

属性集X

属性的闭包

函数依赖推理规则的完备性

函数依赖集的等价和覆盖

最小函数依赖集

9.5 关系模式的分解特性

定义16

模式分解中存在的问题

  • 实际上,关系模式的分解,不仅仅是属性集合的分解,它是对关系模式上的函数依赖集,以及关系模式对应的具体关系进行分解的体现。

例题

评判标准

  • 分解具有无损连接
  • 分解保持函数依赖
  • 分解既保持函数依赖,又具有无损连接性(最好的分解)

无损连接

  • 定理9

例题

无损连接的测试

输入

输出

算法

例题

保持函数依赖的分解

关于关系模式的分解有以下几个重要事实:

(1)若要求分解保持函数依赖,那么模式分解总可以达到3NF,但不一定能达到BCNF。

(2)若要求分解既保持函数依赖,又具有无损连接性,可以达到3NF,但不一定能达到BCNF。

(3)若要求分解具有无损连接性,那一定可达到4NF。

分解成3NF的模式集

算法

关系模式设计原则

总结

相关推荐
larance2 小时前
NebulaGraph 数据库部署与运维指令清单
linux·服务器·数据库
懈尘2 小时前
【实战分享】智慧养老系统核心模块设计 —— 健康监测与自动紧急呼叫
java·后端·websocket·mysql·springboot·livekit
想不明白的过度思考者2 小时前
【MyBatis 知识点解析】#{} 与 ${} 的区别及 SQL 注入实战演示
java·数据库·spring boot·sql·mybatis
tongxh4232 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
yc_xym2 小时前
Redis经典应用-分布式锁
数据库·redis·分布式
qq_150841992 小时前
CVI+MySQL编程入门之用户管理
mysql
正在走向自律2 小时前
电科金仓MySQL迁移实战:一个技术专家的深度踩坑与突围笔记
数据库·mysql·电科金仓·kfs·kdts
moonlight03042 小时前
索引和事务
数据库
TDengine (老段)2 小时前
煤机设备每天 TB 级数据,天地奔牛用 TDengine 把查询提速到“秒级”
大数据·运维·数据库·struts·架构·时序数据库·tdengine