第六章 关系理论¶
约 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)。
求所有候选码的方法
- 找确定的属性
- 一定属于候选码:只出现在左边,或者左右都没出现
- 不属于候选码的属性:只出现在右边
- 可能属于候选码:两边都出现。
- 做闭包
- 对确定的属性求闭包,看能否构成全部的属性
- 若不能,增添可能的属性,直到能推出全部的属性。(答案不唯一)
最小函数依赖集¶
Armstrong公理系统
- 增广率:\(X \rightarrow Y \Rightarrow XZ \rightarrow YZ\)
- 传递率:\(X \rightarrow Y\) + \(Y \rightarrow Z\) $ \Rightarrow X \rightarrow Z$
- 合并规则:\(X \rightarrow Y\) + \(X \rightarrow Z\) $ \Rightarrow X \rightarrow YZ$
- 分解规则:\(X \rightarrow Y\) + \(Z \subseteq Y\) \(\Rightarrow X \rightarrow Z\)
- 伪传递规则:\(X \rightarrow Y\) + \(WY \rightarrow Z\) $ \Rightarrow XW \rightarrow Z$
求解最小依赖集合的方法:
- 拆分右侧
- 去除自身求闭包
- 左侧最小化

第三步:特别注意。
- 直接看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这个依赖关系

关系模式分解(重点)¶
把一个二维表拆成多个二维表,使得符合范式要求。
等价的定义:
- 分解具有无损连接
- 分解要保持函数依赖
- 分解既要保持无损连接,又要保持函数依赖
无损链接¶
两个关系模式
对于只有 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的无损分解
多个关系模式
方法:
- 先求出每个模式各自的函数依赖
- 画出初试表
- 依次扫描函数依赖:
- 如下图中,
B->D, 关系模式中 B 为 a 的,都可以将属性 D 中的替换为 a。
- 如下图中,
B->C,关系模式中 B 为 a 的,属性 D 中不存在 a,则将 b 设为最小值。
- 如下图中,
例题



保持函数依赖¶
保持函数依赖

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

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

判断范式级别¶
方法
- 先求候选码
- 依次判断是否符合范式的要求
tip
任何一个二目关系(只有一个函数依赖,主码->非主码)都是 4 NF。
示例:已知关系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
示例:已知关系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
示例:已知关系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 - Y 和 X Y
例题


分解成3NF模式集的算法¶

示例: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.
Last update: April 24, 2026
Discussion