第二章 关系模型和关系运算理论¶
关系模型概述¶
- 关系数据库系统:是支持关系模型的数据库系统。
- 关系模型的组成
- 关系数据结构
- 关系操作集合
- 关系完整性约束
关系数据结构¶
核心概念¶
- 单一的数据结构——关系:现实世界的实体以及实体间的各种联系均用关系来表示;
- 数据的逻辑结构——二维表:从用户角度,关系模型中数据的逻辑结构是一张二维表。
基础定义¶
域(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)。
- 三类关系:
- 基本关系(基本表或基表):实际存在的表,是实际存储数据的逻辑表示。
- 查询表:查询结果对应的表。
- 视图表:由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。
- 注意
- 关系是笛卡儿积的 有限子集,无限关系在数据库系统中无意义。
- 数学上笛卡儿积不满足交换律,但关系作为数据结构满足交换律,通过为列附加属性名取消元组有序性。
基本关系的性质¶
- 列是同质的(Homogeneous):每一列中的分量是同一类型的数据,来自同一个域。
- 不同的列可出自同一个域:其中的每一列称为一个属性,不同的属性要给予不同的属性名。
- 列的顺序无所谓:列的次序可以任意交换。
- 遵循这一性质的数据库产品如 ORACLE,增加新属性时,永远是插至最后一列;
- 也有许多关系数据库产品没有遵循这一性质,例如 FoxPro 仍然区分了属性顺序;
- 任意两个元组的候选码不能完全相同:由笛卡儿积性质决定
- 但部分数据库产品(如 Oracle、FoxPro)允许重复元组,除非用户定义约束。
- 行的顺序无所谓:行的次序可以任意交换。
- 遵循这一性质的数据库产品如 ORACLE,插入一个元组时永远插至最后一行;
- 但也有许多关系数据库产品没有遵循这一性质,例如 FoxPro 仍然区分了元组的顺序;
- 分量必须取原子值:每一个分量都必须是不可分的数据项,这是规范条件中最基本的一条。
关系模式¶
定义¶
- 关系模式(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\) 为属性名。
- 域名及属性向域的映象常常直接说明为属性的类型、长度。
关系模式与关系的区别¶
| 特征 | 关系模式 | 关系 |
|---|---|---|
| 性质 | 静态的、稳定的 | 动态的、随时间不断变化的 |
| 含义 | 对关系的描述 | 关系模式在某一时刻的状态或内容 |
注:关系模式和关系往往统称为关系,通过上下文加以区别。
关系数据库¶
定义¶
在一个给定的应用领域中,所有 实体及实体之间联系的关系的集合 构成一个关系数据库。
关系数据库的型与值¶
- 关系数据库的型:称为关系数据库模式,是对关系数据库的描述
- 若干域的定义
- 在这些域上定义的若干关系模式。
- 关系数据库的值:是这些关系模式在某一时刻对应的关系的集合,通常简称为关系数据库。
关系操作¶
- 常用的关系操作
- 查询:选择、投影、连接、除、并、交、差、笛卡儿积,查询的表达能力是最主要的部分。
- 加粗:五种基本运算
- 数据更新:插入、删除、修改。
- 查询:选择、投影、连接、除、并、交、差、笛卡儿积,查询的表达能力是最主要的部分。
- 关系操作的特点
- 集合操作方式:操作的对象和结果都是集合。
- 非关系数据模型的数据操作方式:一次一记录;
- 关系数据模型的数据操作方式:一次一集合;
- 集合操作方式:操作的对象和结果都是集合。
- 关系数据语言的种类
- 关系代数(代数方式):用对关系的运算来表达查询要求
- 典型代表:ISBL
- 关系演算(逻辑方式):用谓词来表达查询要求,分为:
- 元组关系演算语言:
- 谓词变元的基本对象是元组变量
- 典型代表:APLHA、QUEL
- 域关系演算语言:
- 谓词变元的基本对象是域变量
- 典型代表:QBE
- 元组关系演算语言:
- 具有关系代数和关系演算双重特点的结构化查询语言
- 典型代表:SQL
- 关系代数(代数方式):用对关系的运算来表达查询要求
- 关系数据语言的特点:
- 关系数据语言是一种高度非过程化的集合操作语言:
- 存取路径的选择由 DBMS 的优化机制完成
- 用户不必用循环结构即可完成数据操作
- 可嵌入高级语言中使用。
- 表达能力等价:关系代数、元组关系演算和域关系演算三种语言在表达能力上完全等价。
- 关系数据语言是一种高度非过程化的集合操作语言:
关系的完整性¶
- 关系模型的完整性规则是对关系的某种约束条件
- 三类完整性约束:实体完整性、参照完整性、用户定义的完整性。
- 其中,实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作关系的 两个不变性,应由关系系统自动支持。
实体完整性¶
- 实体完整性规则(Entity Integrity):若属性 \(A\) 是基本关系 \(R\) 的 主属性,则属性 \(A\) 不能取空值。
- 空值即“不存在”或“无意义”的值。
- 实体完整性规则规定基本关系的 所有主属性都不能取空值。
- 关系模型必须遵守实体完整性规则的原因
- 实体完整性规则针对基本关系,基本表通常对应现实世界的实体集或多对多联系。
- 现实世界中的实体和实体间的联系具有唯一性标识。
- 关系模型中以主码作为唯一性标识。
- 示例:选修(学号,课程号,成绩)
- “学号、课程号”为主码,则两个属性都不能取空值。
参照完整性¶
关系间的引用¶
- 在关系模型中,实体及实体间的联系都用关系描述,因此存在关系与关系间的引用。
- 示例:学生实体、专业实体以及专业与学生间的一对多联系:
- 学生(学号, 姓名, 性别, 专业号, 年龄)
- 专业(专业号, 专业名)
外码(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,3,4}。
关系代数¶
- 关系代数是一种抽象的查询语言,用对关系的运算来表达查询。
- 关系代数运算的三个要素
- 运算对象:关系
- 运算结果:关系
- 运算符:四类
关系代数的四类运算符¶
| 运算符类别 | 具体运算符 | 含义 | 特点 |
|---|---|---|---|
| 集合运算符 | $\cup$ | 并 | 将关系看成元组的集合。 从关系的“水平”方向(行的角度)进行运算。 |
| $-$ | 差 | ||
| $\cap$ | 交 | ||
| $\times$ | 笛卡儿积 | ||
| 专门的关系运算符 | $\sigma$ | 选择 | 不仅涉及行而且涉及列。 |
| $\pi$ | 投影 | ||
| $\bowtie$ | 连接 | ||
| $\div$ | 除 | ||
| 比较运算符 | $>$ | 大于 | 辅助专门的关系运算符进行操作。 |
| $\geq$ | 大于等于 | ||
| $<$ | 小于 | ||
| $\leq$ | 小于等于 | ||
| $<>$ | 不等于 | ||
| 逻辑运算符 | $\neg$ | 非 | 辅助专门的关系运算符进行操作。 |
| $\land$ | 与 | ||
| $\lor$ | 或 |
关系代数的表示记号¶
- \(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\) 的一个分量(列)。
- 设关系模式为 \(R(A_1, A_2, \cdots, A_n)\),它的一个关系设为 \(R\);
- \(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}\}\) 后剩余的属性组。
- \(\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\) 元组。
-
象集 \(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\) 个元组
- 列:为 \(n+m\) 列的元组集合
专门的关系运算¶
选择(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
- \(F\):选择条件,是一个逻辑表达式,基本形式为:\([\neg(] X_1 \theta Y_1 [)][\phi [\neg(] X_2 \theta Y_2 [)]]\ldots\)
投影(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\}\)。
- 在关系 \(R\) 中,\(A\) 可以取 \(a_1, a_2, a_3, a_4\) 四个值