数据库系统概论常考题型解题方法


数据库系统概论常考题型解题方法

一、求闭包

  1. 观察题目中要求的属性: 若是单个属性直接在函数依赖集F中寻找能推出的属性; 若是复合属性则在函数依赖集 F 中求其中包含的单个属性和复合的多个属性能推出的属性。
  2. 重复上述过程,每使用过一个函数依赖后就将该函数依赖从函数依赖集F中划掉,并且更新属性,将新推出的属性集合作为求下次闭包的条件。
  3. 当闭包属性集满足以下两种条件之一时,闭包终止:
    • 闭包属性集为全集u(全集即为包含了 R中所有属性)
    • 或闭包属性集保持不变

image-20250325195903070

image-20250325200632016

image-20250325200708070

3571f11e543838d78d1ef0694de2585


二、求最小函数依赖集(最小覆盖)

最小函数依赖集的定义:

一个函数依赖集 F是最小的,当且仅当满足以下三个条件:

  1. 右部单一属性:所有函数依赖的右边均为单属性。
  2. 左部无冗余属性:每个函数依赖的左部没有多余的属性(即无法通过删除左部任一属性保持原依赖关系)。
  3. 无冗余依赖:不存在冗余的函数依赖(即删除任一依赖后,依赖集的闭包会改变)。

步骤 1:分解右部为单属性

将每个函数依赖的右部分解为单属性,得到新的依赖集 F1。
原理:最小集中所有依赖的右部必须为单属性,便于后续分析。
示例

  • 原依赖:A→BC
  • 分解后:A→B,A→C

步骤 2:消除左部冗余属性

对每个函数依赖 X→A,检查左部 X中是否存在冗余属性。
操作方法

  1. 对 X 中的每个属性 B,计算 X−{B} 在 F 下的闭包 (X−{B})^+^。

  2. 如果闭包包含 A,则 B 是冗余的,可删除。
    示例

    依赖 AB→C,若 A^+^ 包含 C,则简化为 A→C。

步骤 3:消除冗余依赖

逐个检查每个函数依赖 X→Y,判断其是否为冗余:

  1. 从 F中暂时移除 X→Y,得到 F′=F−{X→Y}。
  2. 计算 X 在 F’ 下的闭包 X^+^。
  3. 若 X^+^包含 Y,则 X→Y是冗余的,可永久删除。

示例

  • 若 F={A→B,B→C,A→C},则 A→C 是冗余的(可通过 A→B和 B→C推导)。

三、求候选码

对于给定关系R(U,F), 将属性分为4种集合:

N:没有出现在函数依赖种的属性集合;L: 仅出现在函数依赖左侧的属性集合;R:仅出现在函数依赖右侧的属性集合;LR:即出现在左侧又出现在右侧。

候选码必须包含N,L中的属性,必定不包含R中的属性

求解步骤:

  1. 对L中全体属性和N中全体属性的组合,求F种的闭包

  2. 若上述组合中存在闭包,包括了R中全部属性U,则其为R的候选码,算法结束

  3. 若未能推出全集U,则从LR中加入新属性进入组合,第一轮每次选取1个加入,若能推出全集U,在下次迭代中从LR中移除

    不断重复上述迭代,第n轮向组合中加入LR中的n个属性

    如果不存在n个属性(即:加入这些属性后闭包保持不变),或LR属性为空

    则结束算法并写出候选键(候选键即为能推出全集U的属性集)

image-20250325202217614

a7c86d757c211b68014746bd807b9f6

image-20250325205211949

a4f69d59cfc5a8ea150860429789161

image-20250325210457646

c5a544e2af8022938e7a6850daffdaa


Author: qwq小小舒
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source qwq小小舒 !
  TOC