数据库系统概论 关系模式理论 范式判断解题笔记

41 阅读1分钟

前置概念

首先介绍闭包的概念,闭包就是由一个属性直接或间接推导出的所有属性的集合,例如:

F={AB,BC,AD,EF}F=\{A\rarr B,B\rarr C,A\rarr D,E\rarr F\}

AA 可直接得到 BBDD ,间接得到 CC ,则 AA 的闭包 A+A^+ 就是 {A,B,C,D}\{A, B, C, D\}

闭包的定义 有几种不同的说法:

XX 是函数依赖集,被 XX 逻辑蕴涵的函数依赖全体构成的集合,称为函数依赖集 XX 的闭包,记为 X+X^+

XXYY 均为关系 RR 的属性集的子集, FFRR 上的函数依赖集,若对 RR 的任一属性集 BB ,一旦 XBX\rarr B,必有BYB\subseteq Y,且对 RR 的任一满足以上条件的属性集 Y1Y_1 ,必有 YY1Y\subseteq Y_1 ,此时称 YY 为属性集 XX 在函数依赖集 FF 下的闭包,记作 X+X^+

计算关系 RR 的属性集 XX 的闭包的步骤如下:

  • 第一步:设最终将成为闭包的属性集是 YY ,把 YY 初始化为 XX
  • 第二步:检查 FF 中的每一个函数依赖 ABA \rarr B,如果属性集 AA 中所有属性均在 YY 中,而 BB 中有的属性不在 YY 中,则将其加入到 YY 中;
  • 第三步:重复第二步,直到没有属性可以添加到属性集 YY 中为止。 最后得到的 YY 就是 X+X^+

下面列举几道关于闭包的例题:

例 1 . 已知关系模式 R<U,F>R<U,F> ,其中属性集 U={A,B,C,D,E}U=\{A,B,C,D,E\}F={ABC,BD,CE,ECB,ACB}F=\{AB \rarr C, B \rarr D, C \rarr E, EC \rarr B, AC \rarr B\} ,求属性集 ABAB 在函数依赖集 FF 下的闭包 (AB)+(AB)^+

解析:ABAB 可以推出 CCCC 可推出 EEBB 可推出 DD ,由此可知 ABAB 的闭包包含了 UU 中的所有属性集,因此

(AB)+=ABCDE(AB)^+=ABCDE

例 2 . 已知关系模式 R<U,F>R<U,F> ,其中属性集 U={A,B,C,D}U=\{A,B,C,D\}F={AB,BC,DB}F=\{A \rarr B, B \rarr C, D \rarr B \} ,求 A+A^+(AD)+(AD)^+(BD)+(BD)^+

解析:AA 推出 BBBB 推出 CC ,所以 AA 的闭包为 ABCABCADADBDBD 同理可得,因此,

A+=ABC, (AD)+=ABCD, (BD)+=BCDA^+=ABC,\ (AD)^+=ABCD,\ (BD)^+=BCD

范式的判断步骤

范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求, 满足不同程度要求的为不同范式。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF), 其余范式以此类推。一般说来, 数据库只需满足第三范式(3NF)就行了。

第一范式:主属性(主键)不为空且不重复, 字段不可再分(存在非主属性对主属性的部分依赖)。

第二范式:如果关系模式是第一范式, 每个非主属性都没有对主键的部分依赖。

第三范式:如果关系模式是第二范式, 没有非主属性对主键的传递依赖和部分依赖。

BCNF 范式:所有属性都不传递依赖于关系的任何候选键。

对范式的判断可依据以下流程图,

image-20240124174847891

例 1 . 已知关系模式 R<U,F>R<U,F> ,其中属性集 U={A,B,C}U=\{A,B,C\}F={AB,BA,CA}F=\{A \rarr B, B \rarr A, C \rarr A \} ,该关系模式最高属于第几范式?

  1. 首先判断候选码

    分别找出只在左边出现、左右都出现、右边出现的键。(其实能找到只在左边出现的键后,求闭包,若能导出全部的集合,便可以省去求 LR 和 R ,如果左边的不能求出全集,就要和 LR 组合求闭包)

    只在左边出现( L ): CC

    左右都出现( LR ): AABB

    只在右边出现( R):无

    因此候选码为 CC ,非主属性为 AABB

  2. 接下来,按照以下流程依次判断: 部分依赖传递依赖左边都是候选码

    1. 判断是否为 1NF

      (一般来说,基本所有的范式都要满足 1NF )

    2. 判断是否为 2NF

      只有一个候选码 CC ,且候选码中只包含一个属性(就一个字母),所以不可能存在部分函数依赖。

    3. 判断是否为 3NF

      这里 CA,ABC\rarr A,A\rarr B ,且 A↛CA \not\rarr C ,即这里 CC 可以通过 AA 传递推出 BB容易忽略的一点,就是还要满足 A↛CA \not\rarr C ,就是 AA 不能直接导出 CC

      因此这里存在非主属性对候选码的 传递依赖 。该关系属性最高符合第二范式。

例 2 . 已知关系模式 R<U,F>R<U,F> ,其中属性集 U={A,B,C,D}U=\{A,B,C,D\}F={BD,DB,ABC}F=\{B \rarr D, D \rarr B, AB \rarr C \} ,该关系模式最高属于第几范式?

  1. 判断候选码

    只在左边出现( L ): AA

    左右都出现( LR ): BBDD

    只在右边出现( R):CC

    只在左边出现的 AA 显然不是候选码,因此要和 LR 组合求闭包。

    求得 (AB)+=U(AD)+=U(AB)^+=U,(AD)^+=U ,( DBABCD\rarr B,AB\rarr C ),因此候选码有 (A,B)(A,B)(A,D)(A,D) ,非主属性为 CC

  2. 接下来,按照以下流程依次判断: 部分依赖传递依赖左边都是候选码

    1. 判断是否为 2NF

      ABCAB\rarr C ,非主属性 CC 完全依赖于候选码 ABAB ,该关系模式至少满足 2NF 。

    2. 判断是否为 3NF

      不存在非主属性对候选码的传递依赖,该关系模式至少满足 3NF 。

    3. 判断是否为 BCNF

      当候选码为 (A,B)(A,B) 时, DBD\rarr B ,不满足左边都是候选键,不满足 BCNF ,故为 3NF 。

例 3 . 已知关系模式 R<U,F>R<U,F> ,其中属性集 U={A,B,C}U=\{A,B,C\}F={AB,BA,AC}F=\{A \rarr B, B \rarr A, A \rarr C \} ,该关系模式最高属于第几范式?

  1. 判断候选码

    只在左边出现( L ):无

    左右都出现( LR ): AABB

    只在右边出现( R):CC

    这里 L 为无,因此利用 LR 求闭包。

    求得 A+=UB+=UA^+=U,B^+=U ,因此候选码有 AABB ,非主属性为 CC

  2. 接下来,按照以下流程依次判断: 部分依赖传递依赖左边都是候选码

    1. 判断是否为 2NF

      候选码中只包含一个属性(就一个字母),所以不可能存在部分函数依赖。该关系模式至少满足 2NF 。

    2. 判断是否为 3NF

      这里 BA,ACB\rarr A,A\rarr C ,但 ABA \rarr B ,因此这里不存在非主属性对候选码的 传递依赖 。该关系模式至少满足 3NF 。

    3. 判断是否为 BCNF

      候选码有 AABB ,因此左边都是候选键。该关系模式满足 BCNF 。

例 4 . 已知关系模式 R<U,F>R<U,F> ,其中属性集 U={A,B,C,D}U=\{A,B,C,D\}F={AB,AC,AD,BCA}F=\{A \rarr B, A \rarr C, A \rarr D, BC \rarr A\} ,该关系模式最高属于第几范式?

  1. 判断候选码

    只在左边出现( L ):无

    左右都出现( LR ): AABBCC

    只在右边出现( R): DD

    这里 L 为无,因此利用 LR 求闭包。

    求得 A+=U(BC)+=UA^+=U,(BC)^+=U ,因此候选码有 AABCBC ,非主属性为 DD

  2. 接下来,按照以下流程依次判断: 部分依赖传递依赖左边都是候选码

    1. 判断是否为 2NF

      ADA\rarr DBCDBC\rarr D ,非主属性 DD 完全依赖于候选码,该关系模式至少满足 2NF 。

    2. 判断是否为 3NF

      这里 BCA,ADBC\rarr A,A\rarr D ,但 ABCA \rarr BC ,因此这里不存在非主属性对候选码的 传递依赖 。该关系模式至少满足 3NF 。

    3. 判断是否为 BCNF

      候选码有 AABCBC ,因此左边都是候选键。该关系模式满足 BCNF 。