关系代数

2025年5月5日 | 阅读12分钟

关系代数是一种过程化的查询语言。它提供了一个逐步获得查询结果的过程。它使用运算符来执行查询。

它也是一种概念性语言。我们的意思是,用它编写的查询不在计算机上运行,因此它不被用作商业语言。然而,这些知识使我们能够理解 RDBMS 的优化和查询执行。

DBMS Relational Algebra

基本集合定向操作: 也称为传统的集合定向操作。此操作源自数学集合论。基本集合定向操作包括以下操作。所有操作都是二元操作,这意味着操作应用于一对关系。

  • UNION
  • 交集
  • 差集
  • 笛卡尔积

如果两个关系可以进行并集运算,则满足以下条件

  • 所有关系必须具有相同的属性
  • 第一个关系中的每个列必须与第二个关系中的相应列具有相同的数据类型。相应属性的名称不必相同。

例如: 考虑两个关系 P 和 Q,P 和 Q 的度分别为 m 和 n。度必须相等,则 m=n。

特殊关系操作: 这些操作侧重于元组的结构。这些操作不仅增强了代数的功能,还简化了使用集合定向操作会显得过长的通用查询。特殊关系操作包括以下操作

  • JOIN
  • 选择
  • 投影
  • 除法

让我们逐一详细解释。

1. 选择操作

  • 选择操作也称为限制操作,它产生一个新的关系,其中包含满足指定条件的关系行。
  • 选择操作选择满足给定谓词的元组。
  • 它用西格玛 (σ) 表示。

其中

σ 用于选择谓词
r 用于关系
p 用作命题逻辑公式,可能使用 AND、OR 和 NOT 等连接符。这些关系可以使用关系运算符,如 =、≠、≥、<、>、≤。

例如:LOAN 关系

BRANCH_NAMELOAN_NOAMOUNT
DowntownL-171000
RedwoodL-232000
PerryrideL-151500
DowntownL-141500
MianusL-13500
RoundhillL-11900
PerryrideL-161300

输入

输出

BRANCH_NAMELOAN_NOAMOUNT
PerryrideL-151500
PerryrideL-161300

选择操作的特性

  • 它是一个一元操作,因为它只作用于一个关系。
  • 结果表的度与原始表的度相同。这意味着两个关系中的列数相同。
  • 结果关系中的行数总是小于或等于原始关系。
  • 它独立地作用于关系中的每一行。

2. 投影操作

  • 此操作显示了我们希望出现在结果中的属性列表。其余属性将从表中删除。
  • 它用 ∏ 表示,要检索的属性作为下标,用逗号分隔,关系名跟在 PI 后面,并用括号括起来。

其中

A1A2A3 用作关系 r 的属性名。

示例:CUSTOMER 关系

姓名STREETCITY
Jones主函数Harrison
Smith北部Rye
Hays主函数Harrison
Curry北部Rye
JohnsonAlmaBrooklyn
BrooksSenatorBrooklyn

输入

输出

姓名CITY
JonesHarrison
SmithRye
HaysHarrison
CurryRye
JohnsonBrooklyn
BrooksBrooklyn

投影操作的特性

  • 它是一个一元操作,即它只能作用于一个关系。
  • 结果关系的度等于属性列表中指定的属性数。
  • 如果属性列表包含主键属性,则结果关系中的元组数等于原始关系中的元组数。
  • 非交换性: 它不满足交换律。
  • 去重: 此操作会从表中删除重复的行,从而得到一个有效的关系,称为去重。

3. 并集操作

  • 两个关系的并集操作会产生一个新的关系,其中包含来自两个关系的所有行,并去除重复项。
  • 假设有两个元组 R 和 S。并集操作包含 R 中、S 中或 R 和 S 中的所有元组。
  • 它消除重复的元组。它用 ∪ 表示。

并集操作必须满足以下条件

  • R 和 S 必须具有相同数量的属性。
  • 重复的元组会自动消除。

并集操作的特性

  • 输入关系必须是并集兼容的。
  • 交换性: 这意味着 (R ∪ S) 的结果与 (S ∪ R) 的结果相同。
  • 结合性: 这意味着 R ∪ (S ∪ O) = (R ∪ S) ∪ O,其中 R、S 和 O 是关系。

示例

DEPOSITOR 关系

CUSTOMER_NAMEACCOUNT_NO
JohnsonA-101
SmithA-121
MayesA-321
TurnerA-176
JohnsonA-273
JonesA-472
LindsayA-284

BORROW 关系

CUSTOMER_NAMELOAN_NO
JonesL-17
SmithL-23
HayesL-15
JacksonL-14
CurryL-93
SmithL-11
威廉姆斯L-17

输入

输出

CUSTOMER_NAME
Johnson
Smith
Hayes
Turner
Jones
Lindsay
Jackson
Curry
威廉姆斯
Mayes

4. 交集

  • 假设有两个元组 R 和 S。集合交集操作包含 R 和 S 中的所有元组。
  • 它用交集符号 ∩ 表示。

交集操作的特性

  • 输入关系必须是并集兼容的。
  • 交换性: 这意味着 (R ∩ S) 的结果与 (S ∩ R) 的结果相同。
  • 结合性: 这意味着 R ∩ (S ∩ O) = (R ∩ S) ∩ O,其中 R、S 和 O 是关系。

示例: 使用上面的 DEPOSITOR 表和 BORROW 表

输入

输出

CUSTOMER_NAME
Smith
Jones

5. 差集

  • 两个关系的差集操作会产生一个新的关系,其中包含出现在第一个关系但不在第二个关系中的元组。
  • 假设有两个元组 R 和 S。集合差集操作包含 R 中但 S 中不存在的所有元组。
  • 它用减号(-)表示。

示例: 使用上面的 DEPOSITOR 表和 BORROW 表

输入

输出

CUSTOMER_NAME
Jackson
Hayes
Willians
Curry

集合差集操作的特性

  • 输入关系必须是并集兼容的。
  • 它们不是交换的。这意味着 R - S 的结果与 S - P 的结果不同。
  • 它们不是结合的。这意味着 Q - (R - S) 的结果与 (Q - S) - R 的结果不同,其中 Q、S 和 R 是关系。
  • 交集可以用差集(-)运算表示

(R ∩ S) = R - (R - S)

但是,用单个交集操作编写等式比涉及一对差集操作更方便。这里 R 和 S 的并集是可取的。

6. 笛卡尔积

  • 笛卡尔积用于将一个表中的每一行与另一个表中的每一行组合起来。它也称为交叉积。
  • 它用 X 表示。
  • 它是一个二元关系,这意味着它总是作用于两个关系。

示例

EMPLOYEE

EMP_IDEMP_NAMEEMP_DEPT
1SmithA
2HarryC
3JohnB

DEPARTMENT

DEPT_NODEPT_NAME
A营销
B销售
CLegal

输入

输出

EMP_IDEMP_NAMEEMP_DEPTDEPT_NODEPT_NAME
1SmithAA营销
1SmithAB销售
1SmithACLegal
2HarryCA营销
2HarryCB销售
2HarryCCLegal
3JohnBA营销
3JohnBB销售
3JohnBCLegal

笛卡尔积操作的属性

  • 应用笛卡尔积操作的关系不必是并集兼容的。
  • 结果操作中的总行数等于第一个和第二个关系中的行数之积,即

数据总元组数 = E 的总元组数 + D 的总元组数

  • 如果两个关系的某些属性在公共域上定义,则结果关系可能具有重复属性。
  • 结果的度等于所有关系度的总和

E 的度 = E 的度 + D 的度

  • 交换性: 这意味着 E X D 的结果与 D X 的结果相同
  • 结合性: 这意味着 E X (D X F) = (E X D) X F,其中 E、D 和 F 是关系。

7. 重命名操作

重命名操作用于重命名输出关系。它用 rho (ρ) 表示。如果未应用重命名操作,则结果关系中的属性名与原始关系中的属性名相同,并且顺序也相同。

示例: 我们可以使用重命名运算符将 STUDENT 关系重命名为 STUDENT1。

注意:除了这些通用操作之外,关系代数还可以用于连接操作。

8. 连接操作

连接操作将两个或多个关系组合成一个新的关系,新的关系只包含来自不同关系的满足指定标准的元组。它形成了一个新的关系,包含来自两个连接关系的所有属性,其元组是根据应用的限制定义的,即连接条件应用于两个参与关系。连接在两个具有一个或多个共同属性的关系上执行。这些属性必须是域兼容的,即它们具有相同的数据类型。它是一个二元操作。连接操作用连接符号表示。在两个关系 P 和 Q 上表示连接操作的通用形式为

当我们在连接条件中使用等号运算符时,这种连接称为等值连接 (EQUI Join)。它是最常用的连接。

EMP 表

EMP_IDENAME工资Dept_ID
101Raj4500001
102Lavi3000002
103Chandan4800003
104Ravi3400004
105Abhi3700005

DEPT 关系

Dept_NoDname
1营销
2购买
3融资
4Packing
5营销

在上面的两个表中,假设我们想知道每个员工所在部门的名称。现在,员工信息在 Emp 关系中,部门名称信息在 dept 关系中。因此,要同时检索两个表中的列,我们需要连接 EMP 和 DEPT 关系。关系可以根据 EMP 关系中存在的 Dept_ID 列和 DEPT 关系中存在的 Dept_no 列进行连接,并且它们是域兼容的。因此,EQUI Join 的结果,其条件是 EMP 关系中的 Dept_Id 属性值应等于 DEPT 关系中的 Dept_No 属性值,结果如下所示。

EMP_IDENAME工资Dept_IDDept_NoDname
101Raj45000011营销
102Lavi30000022购买
103Chandan48000033融资
104Ravi34000044Packing
105Abhi37000055营销

另一种称为自然连接,在这种情况下,不需要显式命名列。通过将第一个关系中的任何列与另一个具有相同名称的列连接来执行连接。自然连接的结果如下

EMP_IDENAME工资Dept_IDDname
101Raj4500001营销
102Lavi3000002购买
103Chandan4800003融资
104Ravi3400004Packing
105Abhi3700005营销

自然连接也可能被称为 INNER JOIN。另一种 JOIN 类型,其中一个关系通过比较该关系某一列的值来与自身连接,称为自连接。

SELF Join 示例

EMP_IDENAMEMang_Id
101Raj-
102Lavi101
103Chandan104
104Ravi-
105Abhi-

结果关系

ENAMEMang_Id
LaviRaj
ChandanRavi

在 EMP 关系中,EMP_ID 属性显示员工代码,ENAME 和员工工作的 Mang_Id。其中,有些员工没有 Mang_Id,即其值为 null,因为他们本身就是经理。 (这是一个可能的解释,原文本在此处可能省略了一些内容)

连接操作的特性

  • 与笛卡尔积一样,连接操作是交换的。利用此属性,我们可以选择在连接两个关系时,哪个关系作为内部关系,哪个作为外部关系。如果 P 和 Q 是两个关系,则

P⋈ Q = Q ⋈ P

  • 连接属性为 null 的行不会出现在结果关系中。
  • 我们还可以通过增加复杂性来连接两个以上的关系。
  • 通常在关系之间存在关系时使用连接,例如连接条件基于主键和外键列。
  • 连接是一个非常强大的运算符,与投影一起构成了规范化的基础,即数据库关系设计的理论支持。
  • 如果连接是在两个关系中同名属性上执行的,那么对于 EQUIJOIN 操作是需要重命名的,而对于 NATURAL JOIN 操作则是不需要的,因为前者即 EQUI JOIN,共同属性关系中会存在两个,而后者即自然连接,关系中只有一个共同属性。

除法操作

除法操作会产生一个新的关系,使得出现在结果关系中的每个元组都必须存在于被除数关系中。在分母关系中的每个元组的组合中。它是一个二元操作,作用于两个关系。除法用符号“÷”表示。

示例:检索在所有课程中都讲授的科目名称。

Subject Relation

科目名称 (Subject_Name)Cousres
计算机图形学BCA
计算机图形学BSC GWD
DBMSBtech CS
DBMSBtech IT
Theory of ComputaionMCA
DBMSBCA

Course Relation

Courses Name
BCA
Btech CS
Btech IT
BSC GWD
MCA
BCA

Subject Relation "÷" Course Relation

结果关系是:Result Relation

科目名称 (Subject_Name)
DBMS

除法关系属性

  • 它是一个二元操作,因为它作用于两个关系。
  • 除法操作适合包含“对于所有”短语的查询。
  • 它在数据库应用程序中很少使用。

笛卡尔积和连接的区别

笛卡尔积和连接操作看起来相似,但它们实际上是不同的。连接操作的主要区别在于,只有满足连接条件的行组合才会出现在结果关系中,而在笛卡尔积中,所有可能的行组合都会出现在结果关系中。因此,如果我们不对连接操作应用任何连接条件,那么它就等同于笛卡尔积。连接操作可以根据笛卡尔积表示如下

其中 EMPLOYEE 和 DEPARTMENT 是关系。

为了解释这种区别,请考虑以下关系。

示例

EMPLOYEE

EMP_IDEMP_NAMEDEPT_ID
101Sanya1
102Harwinder2
103Johni3
104Priya4

DEPARTMENT

DEPT_NODEPT_NAME
1教学
2管理
3Non Teaching
4教学

两个关系之间的笛卡尔积如下

输出

EMP_IDEMP_NAMEDEPT_IDDEPT_NODEPT_NAME
101Sanya11教学
101Sanya11教学
101Sanya11教学
102Harwinder22管理
102Harwinder22管理
102Harwinder22管理
103Johni33Non Teaching
103Johni33Non Teaching
103Johni33Non Teaching
104Priya44教学
104Priya44教学
104Priya44教学

两个关系之间的连接操作如下

输出

EMP_IDEMP_NAMEDEPT_IDDEPT_NODEPT_NAME
101Sanya11教学
102Harwinder22管理
103Johni33Non Teaching
104Priya44教学

关于关系代数运算的多个选择题

1. 下列哪个符号用于表示关系代数中的投影操作?

  1. PI
  2. 美元
  3. Omega
  4. Sigma
 

答案:a

说明

投影操作用希腊大写字母 PI 表示,要检索的属性作为下标,用逗号分隔,关系名跟在 PI 后面,并用括号括起来。


2. 下列哪个不是传统的关系代数运算符?

  1. UNION
  2. 区别
  3. 连接
  4. 交集
 

答案:c

说明

Join 是一种特殊代数操作。


3. 关系代数是哪种类型的查询语言?

  1. 过程式
  2. 逻辑
  3. 关系
  4. 语义上
 

答案:a

说明

关系代数是一种过程化的语言。


4. 并集、交集和差集操作是

  1. 三元操作
  2. 一元操作
  3. 二元操作
  4. 四分位数操作
 

答案:c

说明

并集、交集和差集操作是二元操作。


5. 哪个操作在关系代数中被称为限制操作?

  1. 除法操作
  2. 投影操作
  3. Join 操作
  4. Select 操作
 

答案:d

说明

选择操作也称为限制操作,它产生一个新的关系,其中只包含满足指定条件的关系行。


下一个主题DBMS 连接操作