【课堂笔记】《数据库系统概论(第5版)》-第6章:关系数据理论

6.1 问题的提出

针对一个具体的问题,应该如何构造一个适合于他的数据库模式,即应该构造几个关系模式,每个关系有哪几个属性组成等。

由此形成了关系数据库的规范化理论。

一个关系模式应当是一个五元组

R ( U , D , D O M , F ) R(U, D, DOM, F) R(U,D,DOM,F)

  • R是关系名,是符号化的元组语义
  • U为一组属性
  • D为属性组U中的属性所来自的域
  • DOM为属性到域的映射
  • F为属性组U上的一组数据依赖

作为一个二维表,关系要符合一个最基本的条件:每一个分量必须是一个不可分的数据项,满足了这个条件的关系模式就属于第一范式(1NF)

数据依赖的概念

数据依赖是一个关系内部属性与属性之间的一种约束关系,这种约束关系是通过属性间值的相等于否体现出来的数据间的的相关联系。

所有类型的数据依赖中,最重要的是函数依赖(Functional Dependency,FD)多值依赖(Multi-Valued Dependency,MVD)

例如,确定了学生的学号,就能知道学生的名字,类似于数学上的 S n a m e = f ( S n o ) Sname = f(Sno) Sname=f(Sno)的函数关系。

设计的不好的关系模式可能会存在以下问题:

  • 数据冗余(同样的数据重复出现)
  • 更新异常(由于数据冗余,更新数据时,系统需要付出很大的代价维护完整性,否则会面临数据不一致的风险)
  • 插入异常(见书本样例)
  • 删除异常(见书本样例)

6.2 规范化

本节首先讨论如何根据属性间依赖情况来判定关系是否具有某些不适合的性质。

通常,按属性间依赖情况来区分关系规范化程度为第一范式、第二范式、第三范式、第四范式等……

6.2.1 函数依赖

定义6.1

R ( U ) R(U) R(U)是属性集U上的关系模式,X,Y是U的子集,若对于 R ( U ) R(U) R(U)的任意一个可能的关系r,r中不可能存在两个元组在X属性集上相等而在Y属性集上不等,则称**X函数确定Y,或者Y函数依赖于X,记作 X → Y X \rightarrow Y XY

函数依赖和别的数据依赖一样是语义范畴的概念,只能根据语义来确定一个函数依赖。

例如: 姓 名 → 年 龄 姓名 \rightarrow 年龄 这个函数依赖只在没有同名的人的条件下成立。

下面介绍一些术语和记号

  • 如果 X → Y & Y ⊈ X X \rightarrow Y \And Y \nsubseteq X XY&YX,称之为非平凡函数依赖(本书主要讨论的)
  • 如果 X → Y & Y ⊆ X X \rightarrow Y \And Y \subseteq X XY&YX,则称之为平凡函数依赖(必然成立的依赖)
  • X → Y X \rightarrow Y XY,则称X为这个函数依赖的决定属性组,也称为决定因素
  • X → Y & Y → X X \rightarrow Y \And Y \rightarrow X XY&YX,记作 X ← → Y X \leftarrow \rightarrow Y XY
  • 如果Y不函数依赖于X,则记作 X ↛ Y X \nrightarrow Y XY

定义6.2

R ( U ) R(U) R(U)中,如果 X → Y X \rightarrow Y XY,并且对于X的任意一个真子集 X ′ X' X都有 X ′ ↛ Y X' \nrightarrow Y XY,则称Y对X完全函数依赖,记为 X → F Y X \rightarrow^{F} Y XFY,否则,则称Y对X部分函数依赖,记作 X → P Y X \rightarrow^{P} Y XPY

定义6.3

R ( U ) R(U) R(U)中,如果 X → Y , Y ⊈ X , Y ↛ X , Y → Z , Z ⊈ Y X \rightarrow Y, Y \nsubseteq X, Y \nrightarrow X, Y \rightarrow Z, Z \nsubseteq Y XY,YX,YX,YZ,ZY,则称Z对X有传递函数依赖,记作 X → 传 递 Y X \rightarrow^{传递} Y XY

6.2.2 码

定义6.4

设K为 R &lt; U , F &gt; R&lt;U,F&gt; R<U,F>中的属性或属性组和,如果 K → F U K \rightarrow^{F} U KFU,则称K为R的候选码

一般的,如果 K → U K \rightarrow U KU,则K成为超码,候选码是一类特殊的超码,即:候选码的超集一定是超码,候选码的任何真子集不一定是超码(作者就非得写得这么绕)。

如果候选码多于一个,则选定其中一个作为主码

包含在任何一个候选码中的属性称为主属性,其余的属性称为非主属性、非码属性,如果整个属性组是码,称为全码

定义6.5

关系模式R中的属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外部码,简称外码

6.2.3 范式

关系数据库中的关系是要满足一定的要求的,满足不同程度要求的为不同的范式

满足最低要求的称为第一范式,简称1NF;在第一范式中满足进一步要求的称为第二范式,以此类推。

一个低一级范式的关系模式通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫做规范化

6.2.4 2NF

定义6.6

如果 R ∈ 1 N F R \in 1NF R1NF,并且每一个非主属性完全依赖于任何一个候选码,则 R ∈ 2 N F R \in 2NF R2NF

如果一个关系模式 R R R不属于 2 N F 2NF 2NF,会存在以下几点问题:

  • 插入异常
  • 删除异常
  • 修改复杂

6.2.5 3NF

定义6.7

设关系模式 R &lt; U , F &gt; ∈ 1 N F R&lt;U, F&gt; \in 1NF R<U,F>1NF,若 R R R中不存在这样的码 X X X,属性组 Y Y Y以及非主属性 Z Z Z Z ⊈ Y Z \nsubseteq Y ZY),使得 X → Y , Y → Z X \rightarrow Y, Y \rightarrow Z XY,YZ并且 Y ↛ Z Y \nrightarrow Z YZ,则称 R &lt; U , F &gt; ∈ 3 N F R&lt;U, F&gt; \in 3NF R<U,F>3NF

也就是说,如果 R ∈ 3 N F R \in 3NF R3NF,则每一个非主属性既不传递依赖于码,也不部分依赖于码;也就是是说,如果 R ∈ 3 N F R \in 3NF R3NF,则必有 R ∈ 2 N F R \in 2NF R2NF

6.2.6 BCNF

定义6.8

关系模式 R &lt; U , F &gt; ∈ 1 N F R&lt;U, F&gt; \in 1NF R<U,F>1NF,如果当 X → Y , Y ⊈ X X \rightarrow Y, Y \nsubseteq X XY,YX时, X X X必包含码,则 R &lt; U , F &gt; ∈ B C N F R&lt;U, F&gt; \in BCNF R<U,F>BCNF

每一个满足BCNF的关系模式都满足以下性质:

  • 所有非主属性对每一个码都是完全函数依赖;
  • 所有主属性对每一个不包含他的码是完全函数依赖;
  • 没有任何属性完全函数依赖于非码的任何一组属性;

6.2.7 多值依赖

定义6.9

R ( U ) R(U) R(U)是属性集 U U U上的一个关系模式, Z , Y , Z ⊂ U 并 且 Z = U − X − Y Z, Y, Z \subset U 并且 Z = U - X - Y Z,Y,ZUZ=UXY。关系模式中,多值依赖 X → → Y X \rightarrow \rightarrow Y XY成立,当且仅当对 R ( U ) R(U) R(U)的任一关系 r r r,给定一对 ( x , z ) (x, z) (x,z),有一组 Y Y Y的值,这组值这组值仅仅决定于 x x x的值而与 z z z的值无关。(书本定义写的贼乱,看书本的样例来理解)

如果 X → → Y X \rightarrow \rightarrow Y XY并且 Z = ∅ Z = \varnothing Z=,则称 X → → Y X \rightarrow \rightarrow Y XY平凡的多值依赖

多值依赖的性质

  • 多值依赖具有完备性

    如果 X → → Y X \rightarrow \rightarrow Y XY, 则 X → → Z X \rightarrow \rightarrow Z XZ,其中 Z = U − X − Y Z = U - X - Y Z=UXY.

  • 多值依赖具有传递性

    如果 X → → Y , Y → → Z X \rightarrow \rightarrow Y, Y \rightarrow \rightarrow Z XY,YZ,则 X → → Z − Y X \rightarrow \rightarrow Z - Y XZY

  • 函数依赖可以看作是多值依赖的特殊情况

    如果 X → Y X \rightarrow Y XY,则 X → → Y X \rightarrow \rightarrow Y XY

  • i f &ThickSpace; X → → Y , X → → Z , t h e n &ThickSpace; X → → Y ∪ Z if \; X \rightarrow \rightarrow Y, X \rightarrow \rightarrow Z, then \; X \rightarrow \rightarrow Y \cup Z ifXY,XZ,thenXYZ

  • i f &ThickSpace; X → → Y , X → → Z , t h e n &ThickSpace; X → → Y ∩ Z if \; X \rightarrow \rightarrow Y, X \rightarrow \rightarrow Z, then \; X \rightarrow \rightarrow Y \cap Z ifXY,XZ,thenXYZ

  • i f &ThickSpace; X → → Y , X → → Z , t h e n &ThickSpace; X → → Y − Z , X → → Z − Y if \; X \rightarrow \rightarrow Y, X \rightarrow \rightarrow Z, then \; X \rightarrow \rightarrow Y - Z, X \rightarrow \rightarrow Z - Y ifXY,XZ,thenXYZ,XZY

多值依赖与函数依赖的两个基本区别

  • 多值依赖的有效性与属性集的范围有关

    如果 X → → Y X \rightarrow \rightarrow Y XY U U U上成立,则在 W ( X Y ⊆ W ) W(XY \subseteq W) W(XYW)上也成立,反之不然(因为多值依赖涉及U中剩余属性Z)。

  • 如果有函数依赖 X → Y X \rightarrow Y XY U U U上成立,则对于任意的 Y ′ ⊆ U Y&#x27; \subseteq U YU,都有 X → Y ′ X \rightarrow Y&#x27; XY成立,而对于多值依赖 X → → Y X \rightarrow \rightarrow Y XY,不一定有 X → → Y ′ X \rightarrow \rightarrow Y&#x27; XY成立。

6.2.8 4NF

定义6.10

对于关系模式 R &lt; U , F &gt; ∈ 1 N F R&lt;U, F&gt; \in 1NF R<U,F>1NF,如果对于 R R R的每一个非平凡多值依赖 X → → Y ( Y ⊈ X ) X \rightarrow \rightarrow Y(Y \nsubseteq X) XY(YX) X X X都含有码,则称 R &lt; U , F &gt; ∈ 4 N F R&lt;U, F&gt; \in 4NF R<U,F>4NF

4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖,因为如果对于每一个非平凡的多值依赖, X → → Y X \rightarrow \rightarrow Y XY,X都含有候选码,就相当于 X → Y X \rightarrow Y XY

显然,如果一个关系模式为4NF,则其必为BCNF。

6.2.9 规范化小结

规范化的基本思想是逐步消除数据依赖中不合适的部分;

所谓的规范化实际上是概念的单一化;

关系模式的规范化过程是通过对关系模式的分解来实现的,即把低一级的关系模式分解为若干个高一级的关系模式。

6.3 数据依赖的公理系统

下面首先讨论函数依赖的一个完备而有效的公理系统:Armstrong公理系统

定义6.11

对于满足一组函数依赖 F F F的关系模式 R &lt; U , F &gt; R&lt;U, F&gt; R<U,F>,其中任何一个关系 r r r函数依赖 X → Y X \rightarrow Y XY都成立,则称 F F F逻辑蕴含 X → Y X \rightarrow Y XY

Armstrong公理系统

设总体属性集为 U U U F F F U U U上的一组函数依赖,于是有关系模式 R &lt; U , F &gt; R&lt;U, F&gt; R<U,F>,对于这个关系模式有以下推理规则:

  • A1自反律

    如果 X ⊆ Y ⊆ U X \subseteq Y \subseteq U XYU,则 X → Y X \rightarrow Y XY F F F蕴涵。

  • A2增广律

    如果 X → Y X \rightarrow Y XY F F F蕴涵,且 Z ⊆ U Z \subseteq U ZU,则 X Z → Y Z XZ \rightarrow YZ XZYZ

  • A3传递律

    如果 X → Y , Y → Z X \rightarrow Y, Y \rightarrow Z XY,YZ F F F蕴涵,则 X → Z X \rightarrow Z XZ也为 F F F蕴涵。

定理6.1

Armstrong推理规则是正确的。

根据A1,A2,A3三条规则,还可以推理出一下三条规则

  • 合并规则

    如果 X → Y , X → Z X \rightarrow Y, X \rightarrow Z XY,XZ,则 X → Y Z X \rightarrow YZ XYZ

  • 伪传递规则

    如果 X → Y , Y W → Z X \rightarrow Y, YW \rightarrow Z XY,YWZ,则 W X → Z WX \rightarrow Z WXZ

  • 分解规则

    如果 X → Z , Z ⊆ Y X \rightarrow Z, Z \subseteq Y XZ,ZY,则 X → Z X \rightarrow Z XZ

引理6.1

X → A 1 A 2 A 3 ⋯ A k X \rightarrow A_1 A_2 A_3 \cdots A_k XA1A2A3Ak的充分必要条件是 X → A i ( i = 1 , 2 , ⋯ &ThinSpace; , k ) X \rightarrow A_i(i = 1, 2, \cdots, k) XAi(i=1,2,,k)

定义6.12

关系模式 R &lt; U , F &gt; R&lt;U,F&gt; R<U,F>中为 F F F蕴涵的函数依赖的全体叫做 F F F闭包,记为 F + F^+ F+

Armstrong公理是有效的、完备的

  • 有效性

    F F F出发,根据Armstrong公理推导出的每一个函数依赖一定在 F + F^+ F+中。

  • 完备性

    F + F^+ F+中的每一个函数依赖,一定可以由 F F F出发根据Armstrong公理推导出来。

定义6.13

F F F为属性集 U U U上的一组函数依赖,且 X , Y ⊆ U , X F + = { A ∣ X → A 能 由 F 根 据 A r m s t r o n g 公 理 推 导 出 来 } X,Y \subseteq U, X_F^+ = \{ A | X \rightarrow A 能由F根据Armstrong公理推导出来 \} X,YU,XF+={AXAFArmstrong},则 X F + X_F^+ XF+称为属性集 X X X关于函数依赖 F F F的闭包

引理6.2

F F F为属性集 U U U上的一组函数依赖, X , Y ⊆ U X,Y \subseteq U X,YU X → Y X \rightarrow Y XY能由 F F F根据Armstrong公理推导出来的充分必要条件是 Y ⊆ X F + Y \subseteq X_F^+ YXF+

算法6.1 求属性集 X , X ⊆ U X, X \subseteq U X,XU U U U上关于函数依赖集 F F F的闭包 X F + X_F^+ XF+

输 入 : X 、 F 输入: X、F XF

输 出 : X F + 输出: X_F^+ XF+

步 骤 : 步骤:

  1. 令 X ( 0 ) = X , i = 0 令 X^{(0)} = X, i = 0 X(0)=X,i=0

  2. 求 解 属 性 集 B , B = { A ∣ 存 在 属 性 集 V , W , 满 足 V → W ∈ F 且 V ⊆ X ( i ) 且 A ∈ W } 求解属性集B,B = \{ A | 存在属性集V,W,满足V \rightarrow W \in F 且 V \subseteq X^{(i)} 且 A \in W \} BB={AV,WVWFVX(i)AW}

  3. X i + 1 = X ( i ) ∪ B X^{i+1} = X^{(i)} \cup B Xi+1=X(i)B

  4. 如 果 X ( i + 1 ) = X ( i ) 或 X ( i ) = U , 则 X F + 即 为 X ( i ) , 算 法 终 止 如果 X^{(i + 1)} = X^{(i)} 或 X^{(i)} = U,则X_F^+即为X^{(i)},算法终止 X(i+1)=X(i)X(i)=UXF+X(i)

  5. 否 则 , i = i + 1 , 回 到 第 二 步 执 行 否则,i = i + 1,回到第二步执行 i=i+1

算法的严谨描述比较抽象,可以看书上的样例辅助理解

于是,判断 X → Y X \rightarrow Y XY能否由 F F F根据Armstrong公理推导出来,转化为了求解 X F + X_F^+ XF+,并判断 Y Y Y是否为 X F + X_F^+ XF+的子集。

定义6.14

如果 G + = F + G^+=F^+ G+=F+,则称函数依赖集 F F F覆盖 G G G,或者 F , G F,G F,G等价。

引理6.3

F + = G + F^+ = G^+ F+=G+的充分必要条件是 F ⊆ G + 或 G ⊆ F + F \subseteq G^+ 或 G \subseteq F^+ FG+GF+

定义6.15

如果函数依赖集 F F F满足以下条件,则称 F F F为一个极小函数依赖集或者最小依赖集或者最小覆盖。

  1. F F F中任意一个函数依赖的右部仅有一个属性;
  2. F F F中不存在这样的函数依赖 X → A X \rightarrow A XA,使得 F F F F − { X → A } F - \{ X \rightarrow A \} F{XA}等价;
  3. F F F中不存在这样的函数依赖 X → A X \rightarrow A XA X X X有真子集 Z Z Z,使得 F F F F − { X → A } ∪ { Z → A } F - \{ X \rightarrow A \} \cup \{ Z \rightarrow A \} F{XA}{ZA}等价;

(3)的含义是对于 F F F中的每一个函数依赖,左部尽可能简。

定理6.3

每一个函数依赖集 F F F都等价于一个极小函数依赖集 F m F_m Fm,此时称 F m F_m Fm F F F的最小依赖集。

求解最小依赖集的方法

  1. 逐一检查 F F F中的各个函数依赖: X → Y X \rightarrow Y XY,如果 Y = A 1 A 2 ⋯ A k Y = A_1 A_2 \cdots A_k Y=A1A2Ak,则用 { X → A j , j = 1 , 2 , ⋯ &ThinSpace; , k } \{ X \rightarrow A_j, j = 1, 2, \cdots, k \} {XAj,j=1,2,,k}来代替 X → Y X \rightarrow Y XY
  2. 注意检查 F F F中的各个函数依赖: X → A X \rightarrow A XA,令 G = F − { X → A } G = F - \{ X \rightarrow A \} G=F{XA},如果 A ∈ X G + A \in X_G^+ AXG+,则去掉此函数依赖 X → A X \rightarrow A XA
  3. 逐一取出 F F F中的各项函数依赖: X → A X \rightarrow A XA,设 X = B 1 B 2 ⋯ B k X = B_1 B_2 \cdots B_k X=B1B2Bk,注意考察 B i B_i Bi,如果 A ∈ ( X − B i ) F + A \in (X - B_i)_F^+ A(XBi)F+,则用 X − B i X - B_i XBi取代 X X X

应当指出, F F F的最小依赖集 F m F_m Fm并不是唯一的,他与上述过程中的处置顺序有关。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值