数据库总复习第六章 关系数据理论

6.1 规范化

6.1.1 函数依赖

(R(U)是属性集U上的关系模式,X,Y是U的子集)X函数确定Y或Y函数依赖于X,记作 X → Y X\to Y XY

只能根据语义来确定一个函数依赖,例如:姓名->年龄这个函数依赖只有在该部门没有同名人的条件下成立,如果允许有同名人,则年龄就不再函数依赖于姓名

一些术语和记号:

  • X → Y X\to Y XY,但 Y ⊈ X Y\nsubseteq X YX,则称 X → Y X\to Y XY非平凡的函数依赖,反之称为平凡的函数依赖
    • 平凡依赖是必然成立的,我们总是讨论非平凡的函数依赖

  • X → Y X \to Y XY,则称X是决定因素
  • X → Y X \to Y XY Y → X Y \to X YX,则记作 X ← → Y X \leftarrow \to Y X←→Y
  • 若Y不函数依赖于X,记作 X ↛ Y X \nrightarrow Y XY
  • 完全函数依赖: Y依赖于X但是不依赖于X的任何一个真子集,记作 X → F Y X \to^F Y XFY
  • 部分函数依赖: Y对X的子集依赖,记作 X → P Y X\to ^PY XPY
  • 传递函数依赖: X → Y ( Y ⊈ X ) , Y ↛ X , Y → Z , Z ⊈ Y X \to Y(Y \nsubseteq X), Y\nrightarrow X, Y \to Z,Z \nsubseteq Y XY(YX),YX,YZ,ZY
    • 这里加上条件 Y ↛ X Y \nrightarrow X YX,因为如果 Y → X Y\to X YX,则 X ← → Y X\leftarrow \to Y X←→Y,实际上就是 X → 直接 Y X \to ^{直接} Y X直接Y,是直接函数依赖而不是传递函数依赖

6.1.2 码

  • 候选码: 设K为R(U,F)中的属性或属性集合,若U对K完全函数依赖,则K为R的候选码
  • 超码: U部分依赖于K。候选码是最小的超码
  • 主码:若候选码多余一个,则选定其中的一个为主码
  • 主属性: 包含在任何一个候选码中的属性
  • 全码:整个属性组是码
  • 外码:关系模式R中属性或属性组X并非R的码,但X是另外一个关系模式的码,则称X是R的外码

6.1.3 范式

6.1.3.1 2NF

每一个非主属性完全函数依赖于(不部分依赖于)任何一个候选码

6.1.3.2 3NF

每一个非主属性既不不传递依赖于码,也不部分依赖于码

6.1.3.3 BCNF

每一个决定因素都包含码

若3NF只有唯一候选吗,则一定为BCNF

全主属性一定可达3NF,全码一定可达BCNF

6.1.3.4 多值依赖

R(U)是属性集U上的一个关系模式,X,Y,Z是U的子集,并且U=X+Y+Z,如果一个X的值决定一组Y的值,则多值依赖 X → → Y X\to\to Y X→→Y成立

  • 平凡多值依赖: Z为空集,即U=X+Y,且多值依赖 X → → Y X\to\to Y X→→Y成立
  • 非平凡多值依赖: Z非空

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

多值依赖 X → → Y X\to\to Y X→→Y若在R(U)上成立,不能断言对于任何 Y ′ ⊂ Y Y'\subset Y YY X → → Y ′ X\to\to Y' X→→Y成立

6.1.3.5 4NF

不允许有非平凡且非函数依赖的多值依赖

4NF所允许的非平凡的多值依赖实际上就是函数依赖

若一个关系模式为4NF,则必为BCNF

4NF中:

  • 非平凡的多值依赖
    • x含码 -> 多值依赖也是函数依赖
  • 平凡的多值依赖
    • x含码 -> 是函数依赖
    • x不含码 -> 不是函数依赖

在这里插入图片描述

6.1.3.6 例题:判断范式

在这里插入图片描述

6.2 数据依赖的公理系统armstrong公理系统

F逻辑蕴涵 X → Y X \to Y XY:关系模式R<U, F>中,函数依赖 X → Y X\to Y XY成立

  • 有效性:由F出发依据公理推出的每个函数依赖一定在 F + F^+ F+
  • 完备性: F + F^+ F+中每个函数依赖一定可以由F出发根据公理推导出来

6.2.1 推理规则

对R<U, F>有以下推理规则:

  • 自反律:
    • Y ⊆ X ⊆ U Y \subseteq X \subseteq U YXU,则 X → Y X \to Y XY F F F 所蕴涵
    • 子集对全集一定有平凡函数依赖
    • 自反律得到的函数依赖均是平凡的函数依赖,自反律的使用并不依赖于F
  • 增广律:
    • X → Y X \to Y XY F F F 所蕴涵,且 Z ⊆ U Z \subseteq U ZU,则 X Z → Y Z XZ \to YZ XZYZ F F F 所蕴涵
    • 左右各加了一个属性
  • 传递律:
    • X → Y X \to Y XY Y → X Y \to X YX F F F 所蕴涵,则 X → Z X \to Z XZ为F所蕴涵
    • 如果 Y → X , X → Y Y \to X, X\to Y YX,XY,则符合传递律但不符合传递函数依赖
  • 合并规则
    • X → Y X\to Y XY, X → Z X \to Z XZ,有 X → Y Z X \to YZ XYZ
  • 伪传递规则
    • X → Y X \to Y XY, W Y → Z WY \to Z WYZ,有 X W → Z XW \to Z XWZ
  • 分解规则
    • X → Y X \to Y XY, Z ⊆ Y Z \subseteq Y ZY,有 X → Z X \to Z XZ

6.2.2 闭包

F + F^+ F+:F的闭包,F所逻辑蕴含的函数依赖的全体

6.2.2.1 求闭包的步骤

  1. 所有空集依赖
  2. 自身依赖,然后增广律扩充
  3. 原本关系增光扩充

X F + X^+_F XF+:属性集X关于函数依赖集F的闭包(左边全是X的函数依赖)

求候选码:一组属性集的闭包是全集

6.2.2.2 求属性集X闭包的算法

  1. X 0 = X X^0 = X X0=X i = 0 i=0 i=0
  2. 求B,此时B为函数依赖中左边为 X i X^i Xi的函数依赖的右边部分的集合
  3. X i + 1 = B ∪ X i X^{i+1} = B \cup X^i Xi+1=BXi
  4. 判断 X i + 1 = X i X^{i+1} = X^i Xi+1=Xi
  5. 如果相等或等于U,则 X i X^i Xi就是 X F + X^+_F XF+,算法终止
  6. 若否,则 i = i + 1 i = i+1 i=i+1,返回第二步(就是把B合并进去了)

不在函数依赖右边出现的属性一定是候选码组成部分

6.2.2.3 等价与最小覆盖

  • 函数依赖集等价
    • 如果 G + = F + G^+ = F^+ G+=F+,就说函数依赖集F覆盖G(F是G的覆盖,或G是F的覆盖),或F与G等价
  • 最小依赖集/最小覆盖 F m F_m Fm
    • F中任一函数依赖的右部仅含有一个属性
    • 不存在冗余的函数依赖
    • 函数依赖左部要尽可能简(不能再用子集替代)

6.2.2.4 求最小依赖集的方法

  1. 判断右边,分解右端
  2. 去冗余函数依赖
  3. 判断左边,左边如果有多属性值,用子集代替之后判断是否保持函数依赖

F m 不一定是唯一的 F_m不一定是唯一的 Fm不一定是唯一的

例:
在这里插入图片描述

6.3 模式分解

投影: 函数依赖集合 X → Y ∣ X → Y ∈ F + ∧ X Y ⊆ U i \\{ X \to Y|X\to Y\in F^+ \wedge XY\subseteq U_i\\} XYXYF+XYUi 的一个覆盖 F i F_i Fi 叫做 F F F 在属性 U i U_i Ui 上的投影

  • 无损连接性
    保证不丢失信息
  • 保持函数依赖性
    减轻或解决各种异常情况

题型1:判断是否保持函数依赖和无损连接性

例一
在这里插入图片描述


例二 (有隐藏的函数依赖,注意判断)
在这里插入图片描述

题型2:模式分解

判断是否需要分解的理由(一般是分解到3NF)

范式太低,会存在插入、修改、删除数据的异常

1:分解为3NF

在这里插入图片描述

2:分解为BCNF

例一

在这里插入图片描述


例二 (损失了函数依赖)
在这里插入图片描述

3:分解为4NF

例一

在这里插入图片描述


例二 (损失函数依赖)

在这里插入图片描述

6.3.1 总结

  • 若要求分解具有无损连接性,模式分解一定可达4NF(函数依赖范畴一定可达BCNF)
  • 若要求分解保持函数依赖,模式分解一定可达3NF,不一定可达BCNF
  • 若要求分解既保持函数依赖又具有无损连接性,模式分解一定可达3NF,不一定可达BCNF
  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值