Skip to content
Self-Knowing

第六章 关系理论

约 1779 个字 预计阅读时间 6 分钟

关系模式是有五部分组成: R(U,D,DOM,F)

  • R 为关系
  • U 为一组属性
  • D 为属性的域
  • DOM 为属性到域的映射
  • F 为数据依赖

数据依赖:数据依赖是一个关系内部属性与属性之间的一种约束关系。

  • 函数依赖
  • 多值依赖
  • Sno -> Sname : Sname 函数依赖于 Sno,Sno能推出 Sname。

数据库中可能存在的问题

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

函数依赖

一些术语和记号

  • 非平凡的函数依赖:\(X \rightarrow Y, 但 \,\, Y \not \subseteq X\)
  • 平凡的函数依赖:\(X \rightarrow Y, 但 \,\, Y \subseteq X\)
  • 完全函数依赖:\(X \rightarrow Y, 并且对于 X 的任意真子集X',都有 X \not \rightarrow Y\)

若有多个候选码,则选一个作为 主码

超码:主码/候选码的扩展。

主属性:候选码的属性。

非主属性:非候选码的属性。

全码:整个属性组是码,称为全码(ALL-Key)。

求所有候选码的方法

  1. 找确定的属性
    • 一定属于候选码:只出现在左边,或者左右都没出现
    • 不属于候选码的属性:只出现在右边
    • 可能属于候选码:两边都出现。
  2. 做闭包
    • 对确定的属性求闭包,看能否构成全部的属性
    • 若不能,增添可能的属性,直到能推出全部的属性。(答案不唯一)

最小函数依赖集

Armstrong公理系统

  1. 增广率:\(X \rightarrow Y \Rightarrow XZ \rightarrow YZ\)
  2. 传递率:\(X \rightarrow Y\) + \(Y \rightarrow Z\) $ \Rightarrow X \rightarrow Z$
  3. 合并规则:\(X \rightarrow Y\) + \(X \rightarrow Z\) $ \Rightarrow X \rightarrow YZ$
  4. 分解规则:\(X \rightarrow Y\) + \(Z \subseteq Y\) \(\Rightarrow X \rightarrow Z\)
  5. 伪传递规则:\(X \rightarrow Y\) + \(WY \rightarrow Z\) $ \Rightarrow XW \rightarrow Z$​

求解最小依赖集合的方法

  1. 拆分右侧
  2. 去除自身求闭包
  3. 左侧最小化

image-89

第三步:特别注意。

  • 直接看CD—>I,看D(F+)里是否还含有I,结果D(F+) = D,不包含I,再看C(F+)里是否包含I,结果 C(F+) = CDI,包含I,这说明不需要D也可以导出I,因此CD—>I左部中的D是多余的,该依赖便修改为 C—>I
  • 这里需要提醒的地方和第二步有所不同,在判断时,是需要使用正在判断的依赖关系,比如我正在判断CD—>I这个依赖关系,求C的闭包时,是 可以使用CD—>I这个依赖 了,当然前提是C可以导出D,这样才能用到CD—>I这个依赖关系

image-20240316171630998

关系模式分解(重点)

把一个二维表拆成多个二维表,使得符合范式要求。

等价的定义:

  1. 分解具有无损连接
  2. 分解要保持函数依赖
  3. 分解既要保持无损连接,又要保持函数依赖

无损链接

两个关系模式

对于只有 2个关系模式 的分解可以通过下面的定理判断其是否为无损联接分解

定理4.5:设ρ={ R1,R2 }是关系模式R的一个分解,F是R上成立的FD集,那么分解ρ相对于F是无损分解的充分必要条件是

(R1∩R2)→(R1-R2)或(R1∩R2)→(R2-R1) 交集能推出两者之差

定理4.6:如果FD:X→Y在模式R上成立,且X∩Y=\(\emptyset\),则ρ={R-Y,XY }是R的无损分解 非平凡函数依赖,X→Y --》ρ={R-Y,XY }是R的无损分解

多个关系模式

方法:

  1. 先求出每个模式各自的函数依赖
  2. 画出初试表
  3. 依次扫描函数依赖:
    1. 如下图中,B->D, 关系模式中 B 为 a 的,都可以将属性 D 中的替换为 a。image-20240316174739303
    2. 如下图中,B->C ,关系模式中 B 为 a 的,属性 D 中不存在 a,则将 b 设为最小值。image-20240316175001509

例题

image-20240316173848034

image-20240316173919820

image-20240316173930462

保持函数依赖

保持函数依赖

函数依赖

模式分解

把不符合范式要求的函数依赖拆分到两个模式中

image-20240316180051574

范式(重点)

  • 第一范式:所有属性都是不可分割的数据项
  • 第二范式:不包含非主属性对码的部分函数依赖(即每个非主属性都完全依赖于码
  • 第三范式:在2NF的前提下,不包含非主属性对码的传递函数依赖(消除非主属性到非主属性引起的 传递函数依赖)。
  • BCNF: 只有候选码 推出 其他属性,非主属性不能。
  • 第四范式:属于BCNF,且不存在多值依赖。

任何一个包含两个属性的关系模式一定是 BCNF

image-20240316114743189

判断范式级别

方法

  1. 先求候选码
  2. 依次判断是否符合范式的要求

tip

任何一个二目关系(只有一个函数依赖,主码->非主码)都是 4 NF。

1⃣ 示例:已知关系R(A,B,C,D,E)和F={AB→CE,E→AB,C→D},试判断该关系最高为第几范式?

解:

1、关系R的候选键为:AB和E。

因为:\((AB)^+=\{ABCED\}\qquad (E)^+=\{EABCD\}\)

AB可以决定关系的所有属性,E可以决定关系的所有属性,所以AB 和E是关系的候选键

2、主属性为:A、B、E,非主属性为:C、D

3、判断是否满足各个范式的要求:

因为R的所有的属性值域都是不可再分,所以r已经在1NF中了

该关系为2NF,因为C、D不存在对任何键的部分依赖

该关系不是3NF,因为存在非主属性对键的传递依赖C→D

所以R满足的最高范式是2NF

2⃣ 示例:已知关系R(A,B,C,D,E,F)和F={A→B,C →DF,AC→E,D→F},该关系最高为第几范式?

该关系的键为AC,因为\((AC)^+=\{ACBDFE\}\)

主属性为:A、C

非主属性为:B,D,E,F

该关系明显满足1NF,但是由于A→B,C →DF存在非主属性对键的部分函数依赖,所以该关系不是2NF

所以R满足的最高范式是1NF

3⃣ 示例:已知关系r(A,B,C,D)和F={AB→D,AC →BD,B→C},试求出其最高范式?

该关系的键是:AB和AC

主属性是{ABC},非主属性是{D}。

D不部分依赖于任何键,所以该关系是2NF。

该关系也是3NF,因为只有一个非主属性,从而不可能存在两个不同非主属性间的传递依赖

该关系不是BCNF,因为有B→C,而B不是r的键。

逐步分解到 3NF

对于函数:X -> Y

拆成:U - YX Y

例题

image-20240318155414491

image-20240318155259044

分解成3NF模式集的算法

3ea9c95de86a7c989a701317eee20bc3_720

示例:R(A,B,C,D,E) FD{AB→C,DE→C,B→D}

键:ABE

主属性:A B E

非主属性:C D

满足3NF的FD

AB→C,DE→C,B→D,AB→D,BC→D,BE→C,BE→D,ABC→D,ABD→C,ADE→C,BCE→D,BDE→C

最小函数依赖集:AB→C,DE→C,B→D

故分解为ABC,CDE,BD

均不包含R的超键,故增加ABE

分解结果为ABC,CDE,BD,ABE

3.


Created: April 24, 2026
Last update: April 24, 2026

Discussion