06-关系范式

基本定义

  • 五元组R(U,D,DOM,F)R(U,D,DOM,F)

    • RR:关系模式名

    • UU:属性集

    • DD:属性的域

    • DOMDOMUUDD的映射

    • FF:函数依赖集

  • 可省略DDDOMDOM,变为三元组R<U,F>R<U,F>

    • 数据库中DDDOMDOM是明确的

  • 当且仅当UU上的关系RR满足FF时,rr称为关系模式R<U,F>R<U,F> 的一个关系(合法的关系)

数据依赖

函数依赖

  • (X)Y(X)\to YXX函数确定于YYYY函数依赖于XX

    • XX可以唯一确定YYY=f(X)Y=f(X)

    • 不存在XX的值相同而YY的值不同的情况

    • XX是属性集

  • XY,YXXYX \to Y, Y \to X \Rightarrow X \leftrightarrow Y

  • XYX \nrightarrow YYY不函数依赖于XX

  • RR中的所有关系都要满足FF中的所有函数依赖

  • 函数依赖是语义范畴的概念

  • 平凡/非平凡:YY是否是XX的子集

    • 平凡的函数依赖:XYX \to YYXY \subseteq X

    • 非平凡的函数依赖:XYX \to YY⊈XY \not\subseteq X

  • 完全/部分函数依赖:XX的子集能否唯一确定YY

    • 完全函数依赖:XYX \to YYX\forall Y \subset XYYY \nrightarrow Y,记作XFYX \xrightarrow{F} Y

    • 部分函数依赖:XYX \to YZX\exists Z \subset XZYZ \to Y,记作XPYX \xrightarrow{P} Y

  • 传递依赖:XY,YZ,YX,ZYX \to Y, Y \to Z, Y \nrightarrow X, Z \nsubseteq Y,记作X传递ZX \xrightarrow{传递} Z

    • XY,YZ,YXX \to Y , Y \to Z, Y \to X,则ZZ直接依赖于XX,不算传递函数依赖

  • XXYY 是 1:1 映射关系,则 XYX \to Y , YXY \to X

  • XXYY 是 1:N 映射关系,则 YXY \to X

  • XXYY 是 N:M 映射关系,则 不存在函数依赖

闭包

  • X+X^+XX的闭包,XX能唯一确定的属性集

  • 生成方法:递归检查依赖,直到没有新的属性加入为止

多值依赖

  • 某个属性同时决定两组不相关的信息,两组信息可以任意组合,产生冗余

  • R(U)R(U)是属性集UU上的一个关系模式。X,Y,ZX,Y,ZUU的子集,并且Z=UXYZ=U-X-Y。关系模式R(U)R(U)中多值依赖 XYX\twoheadrightarrow Y 成立,当且仅当对R(U)R(U)的任一关系rr,给定的一对(x,z)(x,z)值,有一组YY的值,这组值仅仅决定于xx值而与zz值无关。

  • 平凡的多值依赖:Z=Z=\emptyset

  • 对称性:XYXZ,其中 Z=UXYX \twoheadrightarrow Y \Rightarrow X \twoheadrightarrow Z,\quad \text{其中 } Z = U - X - Y

  • 传递性:XY, YZXZYX \twoheadrightarrow Y,\ Y \twoheadrightarrow Z \Rightarrow X \twoheadrightarrow Z - Y

  • 函数依赖是特例:XYXYX \rightarrow Y \Rightarrow X \twoheadrightarrow Y

  • 并规则:XY, XZXYZX \twoheadrightarrow Y,\ X \twoheadrightarrow Z \Rightarrow X \twoheadrightarrow YZ

  • 交规则:XY, XZXYZX \twoheadrightarrow Y,\ X \twoheadrightarrow Z \Rightarrow X \twoheadrightarrow Y \cap Z

  • 差规则:XY, XZXYZ, XZYX \twoheadrightarrow Y,\ X \twoheadrightarrow Z \Rightarrow X \twoheadrightarrow Y - Z,\ X \twoheadrightarrow Z - Y

  • KKR<U,F>R<U,F> 的一个属性集

  • 候选码:可唯一确定元组的属性集

    • KFUK \xrightarrow{F} UKKRR的一个候选码(最小超码)

  • 超码:在候选码的基础上加其他属性

    • KPUK \xrightarrow{P} UKKRR的一个超码(候选码的超集)

  • RR有多个候选码,选一个作为主码

  • 主属性:候选码中出现的属性

  • 非主属性/非码属性:不包含在任意候选码中的属性

  • 全码:整个属性组都是码,缺一不可

  • 外码:关系模式中的属性集KK并非候选码,但KK在另一个关系模式中是候选码

范式

  • 满足某一级别的关系模式的集合

  • 1NF2NF3NFBCNF4NF5NF1NF \subset 2NF \subset 3NF \subset BCNF \subset 4NF \subset 5NF

  • RnNFR \in nNFRR满足nNFnNF的所有条件

  • 规范化:低一级范式通过模式分解转换成高一级范式模式的集合

1NF

  • 每个分量都是不可分的原子值,不能出现多个项Y={a1,a2}Y=\{a_1,a_2\}的情况

  • 关系数据库的基本要求

  • 缺点

    • 数据冗余 & 更新异常:必须要更改所有的,以免数据不一致

    • 插入异常:插入一个元组时,必须要插入所有的属性值,无法仅插入部分属性值

    • 删除异常:删除某个元组后,可能会丢失仅依赖于该元组的其他信息

  • 解决方法:分解成多个关系模式,用规范化理论消除不合适的数据依赖

2NF

  • 非主属性必须完全依赖于候选码

  • 消除部分依赖

  • 表里属性都和候选码相关

  • 改善:数据冗余、更新异常(但是仍然存在)

# 满足 1NF 不满足 2NF 的例子
表格 (A, B, C, D)
A -> C
(A,B) -> D
# 解决方案
表格1 (A, C)
A -> C
表格2 (A, B, D)
(A, B) -> D

3NF

  • 消除传递依赖

  • 关系模式中没有传递依赖,所有非主属性都直接依赖于候选码

  • 表里属性都和候选码直接相关

  • 改善:插入异常、删除异常(但是仍然存在)

  • 若所有属性都是主属性,则满足 3NF

# 满足 2NF 不满足 3NF 的例子
表格 (A, B, C, D)
A -> B
B -> C
(A,B) -> D
# 解决方案
表格1 (A, B, D)
(A, B) -> D
表格2 (B, C)
B -> C

BCNF

  • 除了候选码本身,不允许任何非候选码的属性集参与决定关系中的其他属性

  • 所有非主属性都完全依赖于每个候选码

  • 所有主属性的完全依赖于每个不包含他的候选码

  • 没有任何属性完全函数依赖于非码的属性

  • 彻底消除插入异常、删除异常

# 满足 3NF 不满足 BCNF 的例子
C -> B  
(A, B) -> C

4NF 5NF

略。

判断流程

感谢 https://www.bilibili.com/video/av741922043/

  1. 求候选码、主属性、非主属性

  2. 所有函数依赖的左边都是超码 -> BCNF

  3. 左边非超码的函数依赖的右边是主属性 -> 3NF

  4. 任意候选码的真子集都无法推出非主属性 -> 2NF

  5. 所有属性都是原子值 -> 1NF

最后更新于