跳转至

第二章 关系模型和关系运算理论

关系模型概述

  • 关系数据库系统:是支持关系模型的数据库系统。
  • 关系模型的组成
    • 关系数据结构
    • 关系操作集合
    • 关系完整性约束

关系数据结构

核心概念

  • 单一的数据结构——关系:现实世界的实体以及实体间的各种联系均用关系来表示;
  • 数据的逻辑结构——二维表:从用户角度,关系模型中数据的逻辑结构是一张二维表。

基础定义

域(Domain)

  • 域是一组 具有相同数据类型的值的集合
  • 例如:
    • 整数
    • 实数
    • 介于某个取值范围的整数
    • 长度指定长度的字符串集合
    • {‘男’,‘女’}
    • 介于某个取值范围的日期

笛卡儿积(Cartesian Product)

  • 定义:域上的一种集合运算。给定一组域 \(D_{1}, D_{2},\cdots, D_{n}\),这些域中可以有相同的。其笛卡儿积为:

    \[ D_{1} × D_{2} × ... × D_{n}=\left\{\left(d_{1}, d_{2}, ..., d_{n}\right) | d_{i} \in D_{i}, i=1,2, ..., n\right\} \]
  • 特点

    • 所有域的所有取值的一个组合
    • 不能重复
  • 基数(Cardinal number):若 \(D_i\)\(i=1,2,\cdots,n\))为有限集,其基数为 \(m_i\)\(i=1,2,\cdots,n\)),则 \(D_{1} × D_{2} ×\cdots× D_{n}\) 的基数 \(M\) 为:

    \[ M = m_1×m_2×\cdots×m_n = \prod_{i=1}^{n} m_i \]
  • 笛卡尔积的表示方法:笛卡儿积可表示为一个二维表,表中的每行对应一个元组,表中的每列对应一个域。

关系(Relation)

  • 关系\(D_{1} × D_{2} ×\cdots× D_{n}\) 的子集叫作在域 \(D_{1}, D_{2},\cdots, D_{n}\) 上的关系,表示为

    \[ R(D_{1}, D_{2},\cdots, D_{n}) \]
    • \(R\) 为关系名
    • \(n\) 为关系的目或度(Degree)
    • 注意:只有笛卡儿积中 具有实际含义的子集才构成关系
    • 元组:关系中的每个元素是关系中的元组,通常用 \(t\) 表示。
    • 单元关系与二元关系:
    • \(n=1\) 时,称该关系为单元关系(Unary relation)
    • \(n=2\) 时,称该关系为二元关系(Binary relation)
    • 关系的表示:关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。
    • 属性:关系中不同列可以对应相同的域,为了加以区分,必须对每列起一个名字,称为属性(Attribute)。
    • \(n\) 目关系必有 \(n\) 个属性。
    • 候选码(Candidate key):若关系中的 某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码。
      • 在最简单的情况下,候选码只包含一个属性。
      • 全码(All-key):在最极端的情况下,关系模式的所有属性组是这个关系模式的候选码,称为全码。
      • 主码(Primary key):
        • 若一个关系有多个候选码,则选定其中一个为主码;
    • 候选码的诸属性称为主属性(Prime attribute);
      • 不包含在任何候选码中的属性称为非主属性(Non-key attribute)。
    • 三类关系
    • 基本关系(基本表或基表):实际存在的表,是实际存储数据的逻辑表示。
    • 查询表:查询结果对应的表。
    • 视图表:由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。
    • 注意
    • 关系是笛卡儿积的 有限子集,无限关系在数据库系统中无意义。
    • 数学上笛卡儿积不满足交换律,但关系作为数据结构满足交换律,通过为列附加属性名取消元组有序性。

基本关系的性质

  1. 列是同质的(Homogeneous):每一列中的分量是同一类型的数据,来自同一个域。
  2. 不同的列可出自同一个域:其中的每一列称为一个属性,不同的属性要给予不同的属性名。
  3. 列的顺序无所谓:列的次序可以任意交换。
    • 遵循这一性质的数据库产品如 ORACLE,增加新属性时,永远是插至最后一列;
    • 也有许多关系数据库产品没有遵循这一性质,例如 FoxPro 仍然区分了属性顺序;
  4. 任意两个元组的候选码不能完全相同:由笛卡儿积性质决定
    • 但部分数据库产品(如 Oracle、FoxPro)允许重复元组,除非用户定义约束。
  5. 行的顺序无所谓:行的次序可以任意交换。
    • 遵循这一性质的数据库产品如 ORACLE,插入一个元组时永远插至最后一行;
    • 但也有许多关系数据库产品没有遵循这一性质,例如 FoxPro 仍然区分了元组的顺序;
  6. 分量必须取原子值:每一个分量都必须是不可分的数据项,这是规范条件中最基本的一条

关系模式

定义

  • 关系模式(Relation Schema)是对关系的描述,是“型”;关系是“值”,是关系模式在某一时刻的状态或内容。
  • 关系模式是对关系的描述
    • 元组集合的结构
      • 属性构成
      • 属性来自的域
      • 属性与域之间的映象关系
    • 元组语义以及完整性约束条件;
    • 属性间的数据依赖关系集合。

形式化表示

  • 关系模式可形式化地表示为:\(R(U,D,dom,F)\)

    符号 含义 示例
    \(R\) 关系名 学生
    \(U\) 组成该关系的属性名集合 {学号, 姓名, 性别, 专业号, 年龄}
    \(D\) 属性组 \(U\) 中属性所来自的域的集合 {整数, 字符串, 日期}
    \(dom\) 属性向域的映象集合 {学号 \(\to\) 整数, 姓名 \(\to\) 字符串, 性别 \(\to\) {‘男’,‘女’}, 专业号 \(\to\) 整数, 年龄 \(\to\) 整数}
    \(F\) 属性间的数据依赖关系集合 {学号 \(\to\) 姓名, 学号 \(\to\) 性别, 学号 \(\to\) 专业号, 学号 \(\to\) 年龄}
  • 关系模式通常简记为 \(R(U)\)\(R(A_1, A_2, \cdots, A_n)\),其中 \(R\) 为关系名,\(A_1, A_2, \cdots, A_n\) 为属性名。

    • 域名及属性向域的映象常常直接说明为属性的类型、长度。

关系模式与关系的区别

特征 关系模式 关系
性质 静态的、稳定的 动态的、随时间不断变化的
含义 对关系的描述 关系模式在某一时刻的状态或内容

注:关系模式和关系往往统称为关系,通过上下文加以区别。

关系数据库

定义

在一个给定的应用领域中,所有 实体及实体之间联系的关系的集合 构成一个关系数据库。

关系数据库的型与值

  • 关系数据库的型:称为关系数据库模式,是对关系数据库的描述
    • 若干域的定义
    • 在这些域上定义的若干关系模式。
  • 关系数据库的值:是这些关系模式在某一时刻对应的关系的集合,通常简称为关系数据库。

关系操作

  • 常用的关系操作
    1. 查询:选择投影、连接、除、、交、笛卡儿积,查询的表达能力是最主要的部分。
      • 加粗:五种基本运算
    2. 数据更新:插入、删除、修改。
  • 关系操作的特点
    • 集合操作方式:操作的对象和结果都是集合。
      • 非关系数据模型的数据操作方式:一次一记录
      • 关系数据模型的数据操作方式:一次一集合
  • 关系数据语言的种类
    1. 关系代数(代数方式):用对关系的运算来表达查询要求
      • 典型代表:ISBL
    2. 关系演算(逻辑方式):用谓词来表达查询要求,分为:
      • 元组关系演算语言:
        • 谓词变元的基本对象是元组变量
        • 典型代表:APLHA、QUEL
      • 域关系演算语言:
        • 谓词变元的基本对象是域变量
        • 典型代表:QBE
    3. 具有关系代数和关系演算双重特点的结构化查询语言
      • 典型代表:SQL
  • 关系数据语言的特点:
    • 关系数据语言是一种高度非过程化的集合操作语言:
      • 存取路径的选择由 DBMS 的优化机制完成
      • 用户不必用循环结构即可完成数据操作
    • 可嵌入高级语言中使用。
    • 表达能力等价:关系代数、元组关系演算和域关系演算三种语言在表达能力上完全等价。

关系的完整性

  • 关系模型的完整性规则是对关系的某种约束条件
  • 三类完整性约束:实体完整性、参照完整性、用户定义的完整性。
    • 其中,实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作关系的 两个不变性,应由关系系统自动支持。

实体完整性

  • 实体完整性规则(Entity Integrity):若属性 \(A\) 是基本关系 \(R\)主属性,则属性 \(A\) 不能取空值
    • 空值即“不存在”或“无意义”的值。
    • 实体完整性规则规定基本关系的 所有主属性都不能取空值
  • 关系模型必须遵守实体完整性规则的原因
    1. 实体完整性规则针对基本关系,基本表通常对应现实世界的实体集或多对多联系。
    2. 现实世界中的实体和实体间的联系具有唯一性标识。
    3. 关系模型中以主码作为唯一性标识。
  • 示例:选修(学号课程号,成绩)
    • “学号、课程号”为主码,则两个属性都不能取空值。

参照完整性

关系间的引用

  • 在关系模型中,实体及实体间的联系都用关系描述,因此存在关系与关系间的引用。
  • 示例:学生实体、专业实体以及专业与学生间的一对多联系:
    • 学生(学号, 姓名, 性别, 专业号, 年龄)
    • 专业(专业号, 专业名)

外码(Foreign Key)

  • \(F\) 是基本关系 \(R\) 的一个或一组属性,但不是关系 \(R\) 的码。如果 \(F\) 与基本关系 \(S\) 的主码 \(K_s\) 相对应,则称 \(F\) 是基本关系 \(R\)外码(Foreign Key);
    • 基本关系 \(R\) 称为参照关系(Referencing Relation)
    • 基本关系 \(S\) 称为被参照关系(Referenced Relation)或目标关系(Target Relation)
  • 说明
    • 关系 \(R\)\(S\) 不一定是不同的关系
    • 目标关系 \(S\) 的主码 \(K_s\) 和参照关系的外码 \(F\) 必须定义在同一个(或一组)域上。
    • 外码并不一定要与相应的主码同名;当外码与相应的主码属于不同关系时,往往取相同的名字,以便于识别。
  • 示例:学生实体及其内部的领导联系(一对多):

    学号 姓名 性别 专业号 年龄 班长
    801 张三 01 19 802
    802 李四 01 20
    803 王五 01 20 802
    804 赵六 02 20 805
    805 钱七 02 19

参照完整性规则

  • 若属性(或属性组)\(F\) 是基本关系 \(R\) 的外码,它与基本关系 \(S\) 的主码 \(K_s\) 相对应(基本关系 \(R\)\(S\) 不一定是不同的关系),则对于 \(R\) 中每个元组在 \(F\) 上的值必须为:
    • 或者取空值(\(F\) 的每个属性值均为空值);
    • 或者等于 \(S\) 中某个元组的主码值。
  • 示例
    • 学生(学号,姓名,性别,专业号,年龄,班长)与专业(专业号,专业名):
      • “专业号”的属性只取两类值:
        1. 空值,表示尚未给该学生分配专业;
        2. 非空值,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能分配到一个不存在的专业中。
      • “班长”属性值可以取两类值:
        1. 空值,表示该学生所在班级尚未选出班长,或该学生本人即是班长;
        2. 非空值,这时该值必须是本关系中某个元组的学号值。
    • 学生(学号,姓名,性别,专业号,年龄)与课程(课程号,课程名,学分)与选修(学号*,*课程号,成绩),则选修关系中的:
      • 主码:{学号, 课程号}
      • 外码:{学号} 和 {课程号}
        • 学号引用学生关系的主码学号;
        • 课程号引用课程关系的主码课程号。
      • 外码可以为空,但是{学号, 课程号}不能为空,因为它是选修关系的主码,为空违背了实体完整性规则。

用户定义的完整性

  • 用户定义的完整性是针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。
  • 关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能。
  • 示例:课程(课程号,课程名,学分):
    • 非主属性“课程名”也不能取空值;
    • “学分”属性只能取值{1,2,3,4}。

关系代数

  • 关系代数是一种抽象的查询语言,用对关系的运算来表达查询。
  • 关系代数运算的三个要素
    • 运算对象:关系
    • 运算结果:关系
    • 运算符:四类

关系代数的四类运算符

运算符类别 具体运算符 含义 特点
集合运算符 $\cup$ 将关系看成元组的集合。
从关系的“水平”方向(行的角度)进行运算。
$-$
$\cap$
$\times$ 笛卡儿积
专门的关系运算符 $\sigma$ 选择 不仅涉及行而且涉及列。
$\pi$ 投影
$\bowtie$ 连接
$\div$
比较运算符 $>$ 大于 辅助专门的关系运算符进行操作。
$\geq$ 大于等于
$<$ 小于
$\leq$ 小于等于
$<>$ 不等于
逻辑运算符 $\neg$ 辅助专门的关系运算符进行操作。
$\land$
$\lor$

关系代数的表示记号

  1. \(R, t \in R, t[A_i]\)
    • 设关系模式为 \(R(A_1, A_2, \cdots, A_n)\),它的一个关系设为 \(R\)
      • \(t \in R\) 表示 \(t\)\(R\) 的一个元组();
      • \(t[A_i]\) 则表示元组 \(t\) 中相应于属性 \(A_i\) 的一个分量()。
  2. \(A, t[A], \overline{A}\)
    • \(A=\{A_{i1}, A_{i2}, \cdots, A_{ik}\}\),其中 \(A_{i1}, A_{i2}, \cdots, A_{ik}\)\(A_1, A_2, \cdots, A_n\) 中的一部分,则 \(A\) 称为 属性列或属性组
    • \(t[A]=(t[A_{i1}],t[A_{i2}],\cdots,t[A_{ik}])\),表示元组 \(t\) 在属性列 \(A\) 上诸分量的集合。
    • \(\overline{A}\) 则表示 \(\{A_1,A_2,\cdots,A_n\}\) 中去掉 \(\{A_{i1},A_{i2},\cdots,A_{ik}\}\) 后剩余的属性组。
  3. \(\overset{\frown}{t_r t_s}\)
    • \(R\)\(n\) 目关系,\(S\)\(m\) 目关系。
    • \(t_r \in R\)\(t_s \in S\)
    • \(\overset{\frown}{t_r t_s}\) 称为元组的连接(元组的串接)。它是一个 \(n+m\) 列的元组,前 \(n\) 个分量为 \(R\) 中的一个 \(n\) 元组,后 \(m\) 个分量为 \(S\) 中的一个 \(m\) 元组。
  4. 象集 \(Z_x\)

    • 给定一个关系 \(R(X,Z)\)\(X\)\(Z\) 为属性组。当 \(t[X]=x\) 时,\(X\)\(R\) 中的象集(Images Set)为

      \[ Z_x=\{t[Z] | t \in R, t[X]=x\} \]
    • 表示 \(R\) 中属性组 \(X\) 上值为 \(x\) 的诸元组在 \(Z\) 上分量的集合。

传统的集合运算

并(Union)

  • 前提:
    • \(R\)\(S\) 具有相同的目 \(n\)(即两个关系都有 \(n\) 个属性)
    • 相应的属性取自同一个域
  • 定义:

    \[ R \cup S = \{t | t \in R \lor t \in S\} \]
    • 仍为 \(n\) 目关系,由属于 \(R\) 或属于 \(S\) 的元组组成。
    • 性质:\(R \cup S = S \cup R\)

差(Difference)

  • 前提:
    • \(R\)\(S\) 具有相同的目 \(n\)
    • 相应的属性取自同一个域。
  • 定义:

    \[ R - S = \{t | t \in R \land t \notin S\} \]
    • 仍为 \(n\) 目关系,由属于 \(R\) 而不属于 \(S\) 的所有元组组成。
    • 性质:\(R - S \neq S - R\)

交(Intersection)

  • 前提:
    • \(R\)\(S\) 具有相同的目 \(n\)
    • 相应的属性取自同一个域。
  • 定义:

    \[ R \cap S = \{t | t \in R \land t \in S\} \]
    • 仍为 \(n\) 目关系,由既属于 \(R\) 又属于 \(S\) 的元组组成。
    • 性质:\(R \cap S = S \cap R\)

广义笛卡儿积(Extended Cartesian Product)

  • 前提:
    • \(R\)\(n\) 目关系,有 \(k_1\) 个元组;
    • \(S\)\(m\) 目关系,有 \(k_2\) 个元组。
  • 定义:

    \[ R×S = \{\overset{\frown}{t_r t_s} | t_r \in R \land t_s \in S\} \]
    • 列:为 \(n+m\) 列的元组集合
      • 元组的前 \(n\) 列是关系 \(R\) 的一个元组
      • \(m\) 列是关系 \(S\) 的一个元组
    • 行:\(k_1 \times k_2\) 个元组

专门的关系运算

选择(Selection)

  • 选择又称为限制(Restriction)。
  • 定义:在关系 \(R\) 中选择满足给定条件的诸元组:

    \[ \sigma_F(R) = \{t | t \in R \land F(t) = \text{True}\} \]
    • \(F\):选择条件,是一个逻辑表达式,基本形式为:\([\neg(] X_1 \theta Y_1 [)][\phi [\neg(] X_2 \theta Y_2 [)]]\ldots\)
      • \(\theta\):比较运算符(\(>, <, \geq, \leq, =, <>\)
      • \(X_1,Y_1\) 等:属性名、常量、简单函数,属性名也可以用它的序号来代替
      • \(\phi\):逻辑运算符(\(\neg, \land, \lor\)
      • \([\ ]\):表示任选项
      • \(\cdots\):表示上述格式可以重复下去
    • 特点:从行的角度进行运算,选出满足条件的元组。
    • 示例
    • 查询信息系(IS 系)全体学生:\(\sigma_{Sdept='IS'}(Student)\)\(\sigma_{5='IS'}(Student)\)

      Sno Sname Ssex Sage Sdept
      201215125 张立 19 IS
    • 查询年龄小于 20 岁的学生:\(\sigma_{Sage<20}(Student)\)\(\sigma_{4<20}(Student)\)

      Sno Sname Ssex Sage Sdept
      201215122 刘晨 19 CS
      201215123 王敏 18 MA
      201215125 张立 19 IS

投影(Projection)

  • 定义:从 \(R\) 选择出若干属性列组成新的关系:

    \[ \pi_A(R) = \{t[A] | t \in R\} \]
    • 其中 \(A\)\(R\) 中的属性列。
    • 特点:从列的角度进行运算,投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)。
    • 示例
    • 查询学生的姓名和所在系,即求 Student 关系上学生姓名和所在系两个属性上的投影:\(\pi_{Sname,Sdept}(Student)\)\(\pi_{2,5}(Student)\)

      Sname Sdept
      李勇 CS
      刘晨 CS
      王敏 MA
      张立 IS
    • 查询学生关系 Student 中都有哪些系:\(\pi_{Sdept}(Student)\),结果(取消重复元组):

      Sdept
      CS
      IS
      MA

连接(Join)

  • 连接也称为 \(\theta\) 连接。
  • 定义:从两个关系的笛卡儿积中选取属性间满足一定条件的元组:

    \[ R \underset{A\theta B}{\bowtie} S = \{\overset{\frown}{t_r t_s} | t_r \in R \land t_s \in S \land t_r[A] \theta t_s[B]\} \]
    • \(A\)\(B\):分别为 \(R\)\(S\) 上度数相等且可比的属性组;
    • \(\theta\):比较运算符。
    • 本质:从 \(R\)\(S\) 的广义笛卡儿积 \(R\times S\) 中选取在 \(A\) 属性组上的值与 \(S\) 关系在 \(B\) 属性组上值满足比较关系的元组。
    • \(\sigma_{ t_r[A] \theta t_s[B]}(R \times S)\)
    • 两类常用连接运算:
    • 等值连接(equi join):\(\theta\)\(=\) 的连接运算

      \[ \begin{aligned} R \underset{A=B}{\bowtie} S &= \{\overset{\frown}{t_r t_s} | t_r \in R \land t_s \in S \land t_r[A] = t_s[B]\} \\ &= \sigma_{ t_r[A] = t_s[B]}(R \times S) \end{aligned} \]
      • 从关系 \(R\)\(S\) 的广义笛卡儿积中选取 \(A\)\(B\) 属性值相等的那些元组。
      • \(R\)\(n\) 目关系,\(S\)\(m\) 目关系,且 \(A\)\(B\) 分别为 \(R\)\(S\) 上的 \(k\) 个属性,则连接结果为 \(n+m\) 列的关系。
        • 自然连接(Natural join):一种特殊的等值连接,两个关系中进行比较的分量必须是相同的属性组,且在结果中 把重复的属性列去掉
      \[ \begin{aligned} R \bowtie S &= \{\overset{\frown}{t_r t_s}[U-B] | t_r \in R \land t_s \in S \land t_r[B] = t_s[B]\} \\ &= \pi_{U-B}(\sigma_{ t_r[A] = t_s[B]}(R \times S)) \end{aligned} \]
      • 自然连接 不需要写明连接条件
      • 其中 \(R\)\(S\) 具有相同的属性组 \(B\)\(U\)\(R\)\(S\) 的全体属性集合。
      • \(R\)\(n\) 目关系,\(S\)\(m\) 目关系,且 \(A\)\(B\) 分别为 \(R\)\(S\) 上的 \(k\) 个属性,则连接结果为 \(n+m-k\) 列的关系。
      • 外连接(Outer Join):如果把舍弃的元组也保存在结果关系中,而在其他属性上填空值(Null),这种连接就叫做外连接。
        • 左外连接(LEFT OUTER JOIN 或 LEFT JOIN):只把左边关系 R 中要舍弃的元组保留。
        • 右外连接(RIGHT OUTER JOIN 或 RIGHT JOIN):只把右边关系 S 中要舍弃的元组保留。
      • 注意:
        • 选择和投影运算的时间复杂度为 \(n\) 数量级(\(n\) 为元组个数);
        • 连接运算的时间复杂度为 \(n \times m\) 数量级(\(n\)\(m\) 分别是两个关系中的元组个数)
        • 为减少关系运算的时间复杂度,从而提高效率,通常 先做选择运算,再做投影运算,最后做连接运算
      • WHERE,再 SELECT,最后 JOIN
      • 先选择:减少行数,再投影:减少列数,最后连接:减少笛卡儿积的计算量。

除(Division)

  • 给定关系 \(R(X,Y)\)\(S(Y,Z)\),其中 \(X, Y, Z\) 为属性组。\(R\) 中的 \(Y\)\(S\) 中的 \(Y\) 可以有不同的属性名,但必须出自相同的域集。
  • 定义:\(R\)\(S\) 的除运算得到一个新的关系 \(P(X)\)\(P\)\(R\) 中满足在 \(X\) 上分量值 \(x\) 的象集 \(Y_x\) 包含 \(S\)\(Y\) 上投影的集合的元组在 \(X\) 属性列上的投影:

    \[ R ÷ S = \{t_r[X] | t_r \in R \land \pi_Y(S) \subseteq Y_x\} \]
    • 其中 \(Y_x\)\(x\)\(R\) 中的象集,\(x = t_r[X]\)
    • 特点:同时从行和列角度进行运算。
    • 示例
    • 关系 \(R\)

      \(A\) \(B\) \(C\)
      \(a_1\) \(b_1\) \(c_2\)
      \(a_2\) \(b_3\) \(c_7\)
      \(a_3\) \(b_4\) \(c_6\)
      \(a_1\) \(b_2\) \(c_3\)
      \(a_4\) \(b_6\) \(c_6\)
      \(a_2\) \(b_2\) \(c_3\)
      \(a_1\) \(b_2\) \(c_1\)
    • 关系 \(S\)

      \(B\) \(C\) \(D\)
      \(b_1\) \(c_2\) \(d_1\)
      \(b_2\) \(c_1\) \(d_1\)
      \(b_2\) \(c_3\) \(d_2\)
    • \(R ÷ S\)

      • 在关系 \(R\) 中,\(A\) 可以取 \(a_1, a_2, a_3, a_4\) 四个值
        • \(a_1\) 的象集为 \(\{(b_1,c_2),(b_2,c_3),(b_2,c_1)\}\)
        • \(a_2\) 的象集为 \(\{(b_3,c_7),(b_2,c_3)\}\)
        • \(a_3\) 的象集为 \(\{(b_4,c_6)\}\)
        • \(a_4\) 的象集为 \(\{(b_6,c_6)\}\)
      • 关系 \(S\)\((B,C)\) 属性组上的投影为 \(\{(b_1,c_2),(b_2,c_1),(b_2,c_3)\}\)
      • 只有 \(a_1\) 的象集包含了 \(S\)\((B,C)\) 属性组上的投影,所以 \(R ÷ S = \{a_1\}\)