关系演算

2025年2月12日 | 阅读 6 分钟
DBMS Relational Calculus

有一种替代的查询制定方式称为关系演算。关系演算是一种非过程式查询语言。在非过程式查询语言中,用户只关心如何获得最终结果的细节。关系演算只说明要什么,而不解释如何做。大多数商业关系型语言都基于关系演算的某些方面,包括 SQL-QBE 和 QUEL。

为什么称为关系演算?

它基于谓词演算,这是符号语言的一个分支的名称。谓词是带有参数的真值函数。通过为参数代入值,函数的结果就变成了一个称为命题的表达式。它可以是真的也可以是假的。它是谓词演算子集的一个定制版本,用于与关系数据库通信。

许多演算表达式涉及量词的使用。有两种量词:

  • 全称量词: 全称量词用 ∀ 表示,读作“对于所有”,这意味着在给定的元组集合中,所有元组都满足给定条件。
  • 存在量词: 存在量词用 ∃ 表示,读作“存在”,这意味着在给定的元组集合中,至少有一个元组的值满足给定条件。

在使用公式中的量词概念之前,我们需要了解自由变量和约束变量的概念。

一个元组变量 t 如果被量化,则称其为约束变量,这意味着如果它在任何地方出现,那么这个变量就是被约束的。未被约束的变量称为自由变量。

自由变量和约束变量可以与编程语言中的全局变量和局部变量进行比较。

关系演算的类型

DBMS Relational Calculus

1. 元组关系演算 (TRC)

它是一种非过程式查询语言,其基础是查找满足谓词的元组变量(也称为范围变量)。它描述了所需信息,而无需提供获取该信息的具体过程。元组关系演算专门用于选择关系中的元组。在 TRC 中,过滤变量使用关系中的元组。结果可以包含一个或多个元组。

符号表示

元组关系演算中的查询表示为以下符号:

其中

T 是结果元组

P(T) 是用于获取 T 的条件。

例如

输出:此查询从 AUTHOR 关系中选择元组。它返回 AUTHOR 关系中写了“database”相关文章的作者的“name”元组。

TRC(元组关系演算)可以被量化。在 TRC 中,我们可以使用存在量词 (∃) 和全称量词 (∀)。

例如

输出:此查询将产生与上一个查询相同的结果。

2. 域关系演算 (DRC)

第二种关系形式称为域关系演算。在域关系演算中,过滤变量使用属性的域。域关系演算使用与元组演算相同的运算符。它使用逻辑连接词 ∧ (与)、∨ (或) 和 ┓ (非)。它使用存在量词 (∃) 和全称量词 (∀) 来绑定变量。QBE 或 Query by example 是与域关系演算相关的查询语言。

符号表示

其中

a1, a2 是属性
P 代表由内部属性构建的公式

例如

输出:此查询将从 javatpoint 关系中生成 article、page 和 subject,其中 subject 是 database。

DBMS 中的关系演算用例

DBMS 中的关系演算用例如下所示。

  • 借助关系演算,可以轻松创建包含多个表、聚合和条件的复杂查询。它帮助用户从数据库中获取所需信息。
  • 验证数据是关系演算的另一个好处。用户可以使用它来验证数据是否满足要求,并查找错误或不一致之处。
  • 关系演算数据库建模和设计的重要组成部分。它有助于定义主键和外键约束、完整性要求、模式以及数据库架构的其他必要条件。
  • 可以使用它执行高级数据分析任务,如排序、过滤、聚合和分组。它使用户能够从大型数据库中提取有价值的见解。

DBMS 中关系演算的限制

  • 与 SQL 等其他查询语言相比,它并不那么容易使用。它没有提供简洁高效地编写复杂查询所需的运算。
  • 它是一种声明式语言,不关心如何获取数据,只关心要获取什么。
  • 它不允许递归查询,也不提供自动查询优化方法。
  • 在处理半结构化或非关系型数据(如图数据或 JSON 文档)时,它可能不是最佳选择。

结论

在 DBMS 中,关系演算告诉我们要从数据库中获取什么,而不是如何获取。

关系演算是一种声明式语言。

TRC 使用元组变量来针对谓词表达式的条件验证每一行。

DRC 利用域变量根据要求返回所需的列或属性。

TRC 和 DRC 都可以为任何需求编写。

TRC 和 DRC 查询可以返回多个元组或属性。

常见问题

1. 域关系演算与元组关系演算有什么区别?

而域关系演算用于从关系中选择单个值,元组关系演算则使用元组(行)来选择关系(表)中的元组。域关系演算使用单个值变量,而元组关系演算使用元组变量来表示元组。

2. 关系演算使用的查询语言是过程式的还是非过程式的?

关系演算使用的查询语言是非过程式的。它描述了所需的数据,而不是如何获取它。DBMS 系统负责执行查询的实际操作。

3. 关系演算有哪些限制?

与关系代数相比,不熟悉形式逻辑的人可能会发现关系演算更难理解。由于数据库管理系统必须在执行之前将演算表达式转换为可比较的代数表达式,因此它可能不如关系代数有效,尤其是在处理复杂查询时。

关系代数选择题

1. _ _ _ _ 查询语言的目标是为用户提供期望的结果。

  1. 环状
  2. 非过程式
  3. 过程式
  4. 流程

答案:b

解释:非过程式查询语言的目标是为用户提供期望的结果。


2. 以下哪项指定了关系演算的类型?

  1. 域关系演算
  2. A 和 C 均可
  3. 元组关系演算

答案:b

解释:关系演算有两种类型:域关系演算和元组关系演算。


3. 在 TRC 中,_ _ _ _ 使用关系中的元组。

  1. 过滤统计
  2. 非过滤变量
  3. 过滤变量
  4. 非过滤统计

答案:c

解释:过滤变量在 TRC 中使用关系中的元组。


4. 非过程式查询语言称为 _ _ _ _ 系统。

  1. 以上都不是
  2. 理性演算
  3. 模糊演算
  4. 关系演算

答案:d

解释:非过程式查询语言称为关系演算。


5. 元组关系演算用于在关系中选择 _ _ _ _ 。

  1. 属性
  2. 关系
  3. 元组 (Tuples)
  4. 微积分

答案:c

解释:元组关系演算用于在关系中选择元组。


下一主题函数依赖