【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)

关系数据理论

  • 6.1 为什么要学习关系数据理论
    • 什么是好的数据库逻辑设计
    • 什么是数据依赖
    • 关系模式的简化表示
  • 6.2 规范化 — 关系的规范化理论
    • 6.2.1 函数依赖
      • 1.函数依赖
      • 2.平凡函数依赖与非平凡函数依赖
      • 3.完全函数依赖与部分函数依赖
      • 4.传递函数依赖
    • 6.2.2 码
      • 候选码、超码
      • 主码
      • 主属性、非主属性
      • 全码
      • 外码
    • 6.2.3 范式
    • 6.2.4 第二范式(2NF)
      • 2NF的问题
    • 6.2.5 第三范式(3NF)
      • 3NF的问题
    • 6.2.6 BC范式(BCNF)
    • 6.2.9 规范化小结
  • 6.3 数据依赖的公理系统
      • 函数依赖闭包
      • 求属性集X 关于F的闭包X~F~^+^
      • 函数依赖集等价的概念
      • 最小依赖集
  • 6.4 模式的分解
    • 6.4.1 模式分解的3个定义
      • 模式分解示例
    • 6.4.2 分解的无损连接性和保持函数依赖性
      • 1.具有无损连接性的模式分解
      • 2.保持函数依赖的模式分解
      • 3.分解的无损连接性和保持函数依赖性
    • 6.4.3 模式分解的算法
  • 6.5 小结
  • 【习题】

笔记目录点这里:南邮计算机专业基础

6.1 为什么要学习关系数据理论

什么是好的数据库逻辑设计

举一个反面例子

学校开发一个学校教务的数据库,涉及的对象有:
学生的学号(Sno)、所在系(Sdept)、系主任姓名(Mname)、课程号(Cno)和成绩(Grade)。

语义:

  1. 一个系有若干学生, 但一个学生只属于一个系;
  2. 一个系只有一名主任;
  3. 一个学生可以选修多门课程, 每门课程有若干学生选修;
  4. 每个学生所学的每门课程都有一个成绩。

设计了一个关系模式:STUDENT(Sno, Sdept, Mname, Cno, Grade)
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第1张图片

这个关系模式存在很多问题:

  • 数据冗余度太大,浪费存储空间
    如:系主任的姓名重复出现,重复次数与该系所有学生的所有课程成绩出现次数相同。
  • 更新异常(Update Anomalies)
    数据冗余 ,更新数据时,维护数据完整性代价大;
    如果某系更换系主任,系统必须修改与该系学生有关的每一个元组。
    【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第2张图片
  • 插入异常(Insertion Anomalies),该插入的数据插不进去
    如果新成立一个软件工程系,还没有招生,我们就无法把这个系及其系主任的信息存入数据库。
  • 删除异常(Deletion Anomalies),不该删除的数据也删去了
    如果某个系的学生全部毕业了, 我们在删除该系学生信息的同时,把这个系及其系主任的信息也丢掉了。

很明显这不是一个好的关系模式。
问题的原因:由于模式中的某些数据依赖引起的。
解决方法:把这个单一模式分成3个关系模式

  • S ( Sno,Sdept ) ;
    Sno → Sdept
  • SC ( Sno,Cno,Grade ) ;
    ( Sno,Cno ) → Grade
  • DEPT ( Sdept,Mname ) ;
    Sdept → Mname

这3个模式不会发生插入异常、删除异常毛病;数据冗余得到控制。

再把观察、经验上升为理论:用规范化理论改造关系模式,消除其中不合适的数据依赖

什么是数据依赖

  • 数据依赖是完整性约束的一种表现形式。
  • 数据依赖是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系。

例如:存在关系 STUDENT ( Sno ,Sdept, Mname,Cno,Grade )

该关系模式的属性集合记为U:

  • U ={ Sno, Sdept, Mname, Cno, Grade }

数学中的函数 y = f(x),自变量 x 确定之后,相应的函数值 y 也就唯一地确定了。
Sdept = f(Sno),Sno 函数确定 Sdept,记为 Sno → Sdept;
Mname = f(Sdept),Sdept 函数确定 Mname,记为 Sdept → Mname;
Grade = f((Sno, Cno)) , (Sno, Cno) 函数确定 Grade,记为 (Sno, Cno) → Grade;

属性组U上的函数依赖集合,记为F:

  • F ={ Sno → Sdept, Sdept → Mname, (Sno, Cno) → Grade }

用一个图表示数据依赖:【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第3张图片

数据依赖的主要类型

  • 函数依赖(Functional Dependency,简记为FD)
  • 多值依赖(Multivalued Dependency,简记为MVD)
  • 连接依赖
  • … …

数据依赖对关系模式的影响

  • 不合适的数据依赖,造成插入异常、删除异常、更新异常和数据冗余问题

关系模式的简化表示

关系模式的形式化定义:R ( U, D, DOM, F )

  • R:关系名,是符号化的元组语义
  • U:该关系的属性集合
  • D:属性组U中属性所来自的域
  • DOM:属性向域的映象集合
  • F:属性间数据的依赖关系集合

关系模式的简化表示:R
将关系模式简化为一个三元组,影响数据库模式设计的主要是 U 和 F。
当且仅当 U 上的一个关系 r 满足 F 时,r 称为关系模式 R(U, F) 的一个关系。

例如:关系模式 STUDENT

  • 属性集合 U = { Sno, Sdept, Mname, Cno, Grade }
  • 依赖关系 F ={ Sno → Sdept, Sdept → Mname, (Sno, Cno) → Grade}
  • STUDENT ( Sno, Sdept, Mname, Cno, Grade,
    Sno → Sdept, Sdept → Mname, (Sno, Cno) → Grade )

    【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第4张图片该关系模式 STUDENT 存在诸多问题。

如何解决关系模式中存在的问题?
规范化理论 — 找出关系模式中不合适的数据依赖,消除它们,可以在不同程度上解决插入异常、删除异常、更新异常和数据冗余问题。

6.2 规范化 — 关系的规范化理论

6.2.1 函数依赖

1.函数依赖

定义:
设 R(U) 是一个属性集 U 上的关系模式,X 和 Y 是 U 的子集。若对于 R(U) 的任意一个可能的关系 r,r 中不可能存在两个元组在 X 上的属性值相等, 而在 Y 上的属性值不等则称 “X函数确定Y” 或 “Y函数依赖于X” ,记作X → Y。X 称为这个函数依赖的决定属性组,也称为决定因素(Determinant)。
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第5张图片
反例:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第6张图片

问:由下面的关系表, 能否得出 Sname → Sno ?
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第7张图片
答:只由关系表不能得出依赖关系。函数依赖不是指关系模式R的某个或某些关系实例r满足的约束条件,而是指R的所有关系实例r均要满足的约束条件

如何确定函数依赖?
函数依赖是语义范畴的概念。只能根据数据的语义来确定函数依赖。

  • 如Sname →Sno函数依赖只有在“学生不允许有重名”的条件下成立。

数据库设计者可以对现实世界作强制的规定。

  • 例如设计者可以强行规定不允许学生有重名,因而使函数依赖
    Sname → Sno,Sname → Ssex, Sname → Sage,Sname → Sdept 成立。

函数依赖是指关系模式R在任何时刻的关系实例均要满足的约束条件

  • 不是指某个或某些关系实例r满足的约束条件,而是指R的所有关系实例r均要满足的约束条件。

2.平凡函数依赖与非平凡函数依赖

定义:
在这里插入图片描述
示例:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第8张图片

对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义,因此若不特别声明, 我们总是讨论非平凡函数依赖

3.完全函数依赖与部分函数依赖

定义:
在这里插入图片描述
示例:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第9张图片

4.传递函数依赖

定义:
在这里插入图片描述
示例:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第10张图片

6.2.2 码

候选码、超码

候选码、超码定义:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第11张图片
候选码、超码示例:
在这里插入图片描述

主码

在这里插入图片描述

主属性、非主属性

主属性、非主属性定义:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第12张图片
主属性、非主属性示例:
在这里插入图片描述

全码

【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第13张图片

外码

外码定义:
在这里插入图片描述
外码示例:
在这里插入图片描述

6.2.3 范式

  • 范式是符合某一种级别的关系模式的集合。
  • 关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式。

范式的种类:

  • 第一范式(1NF)
  • 第二范式(2NF)
  • 第三范式(3NF)
  • BC范式(BCNF,Boyce和Codd共同提出的范式)
  • 第四范式(4NF)
  • 第五范式(5NF)

各种范式之间存在联系:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第14张图片
第一范式
1NF的定义:如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第15张图片
第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据模式。(不能表中有表)

6.2.4 第二范式(2NF)

只满足第一范式的关系模式并不一定是一个好的关系模式
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第16张图片
2NF定义:
在这里插入图片描述
2NF示例:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第17张图片
一个关系模式R不属于2NF,就会产生问题。
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第18张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第19张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第20张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第21张图片
原因: SLC(Sno, Sdept, Sloc, Cno, Grade) 中
Sdept、 Sloc 部分函数依赖于码。SLC的码为(Sno, Cno)
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第22张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第23张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第24张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第25张图片

2NF的问题

【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第26张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第27张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第28张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第29张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第30张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第31张图片

【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第32张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第33张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第34张图片

6.2.5 第三范式(3NF)

3NF的定义:
在这里插入图片描述
3NF示例:
在这里插入图片描述
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第35张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第36张图片
3NF的性质:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第37张图片

3NF的问题

【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第38张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第39张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第40张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第41张图片

6.2.6 BC范式(BCNF)

BC范式定义:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第42张图片
BC范式示例:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第43张图片
BC范式的性质:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第44张图片

6.2.9 规范化小结

【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第45张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第46张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第47张图片

6.3 数据依赖的公理系统

【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第48张图片
Armstrong公理系统:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第49张图片
导出规则:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第50张图片

函数依赖闭包

闭包 F+ 定义:
在这里插入图片描述

X关于函数依赖集F的闭包XF+定义:
在这里插入图片描述

求属性集X 关于F的闭包XF+

算法:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第51张图片
示例:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第52张图片
Armstrong公理系统的有效性与完备性:
在这里插入图片描述

函数依赖集等价的概念

函数依赖集等价定义:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第53张图片

最小依赖集

最小依赖集定义:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第54张图片
最小依赖集例题:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第55张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第56张图片

求出了A+,发现 B 是冗余的。
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第57张图片
求出 B+,B 不是冗余的。
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第58张图片
这边一眼就能看出来了,所谓求XX的闭包不过是种说法罢了,千万不要被思维定式。
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第59张图片
F 的最小依赖集 Fm 不一定是唯一的
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第60张图片

6.4 模式的分解

6.4.1 模式分解的3个定义

【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第61张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第62张图片

模式分解示例

在这里插入图片描述


【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第63张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第64张图片


【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第65张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第66张图片


【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第67张图片

【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第68张图片


【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第69张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第70张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第71张图片

6.4.2 分解的无损连接性和保持函数依赖性

1.具有无损连接性的模式分解

定义:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第72张图片
算法:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第73张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第74张图片
例题:
这题看不懂看这个:数据库系统(哈尔滨工业大学)P167 16.2-无损连接分解及其检验算法
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第75张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第76张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第77张图片

特殊情况:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第78张图片
在这里插入图片描述

2.保持函数依赖的模式分解

定义:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第79张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第80张图片

示例:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第81张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第82张图片

3.分解的无损连接性和保持函数依赖性

【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第83张图片
例题:
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第84张图片

6.4.3 模式分解的算法

【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第85张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第86张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第87张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第88张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第89张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第90张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第91张图片
在这里插入图片描述
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第92张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第93张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第94张图片

6.5 小结

【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第95张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第96张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第97张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第98张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第99张图片

【习题】

(1)
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第100张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第101张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第102张图片
(2)
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第103张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第104张图片
(3)
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第105张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第106张图片
(4)
在这里插入图片描述
(5)
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第107张图片
(6)
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第108张图片
(7)
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第109张图片
(8)
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第110张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第111张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第112张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第113张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第114张图片
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第115张图片
(7)
【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)_第116张图片

你可能感兴趣的:(计算机专业基础)