关系数据库管理系统 - 关系代数
你好,未来的数据库巫师们!我很高兴能成为你们在这神奇的关系代数世界中的向导。作为一个教授计算机科学多年的人(我们就说我还记得软盘真正软的时代吧),我可以向你保证,掌握这个主题就像在数据库领域中获得了超能力。那么,让我们开始吧!
关系代数
想象你正在整理你庞大的超级英雄动作人偶收藏(或者也许这只是我)。关系代数就像拥有一套特殊能力,允许你以极其有用的方式操纵和查询你的收藏。它是我们如何与关系数据库交互的基础,为在关系(表)上进行的操作提供了一个理论框架。
基本概念
在我们开始使用花哨的符号之前,让我们先建立一些基本规则:
- 关系是元组(行)的集合
- 属性是列标题
- 操作产生新的关系作为其结果
现在,让我们来看看我们拥有的超能力(操作):
操作 | 符号 | 描述 |
---|---|---|
选择 | σ | 基于条件过滤行 |
投影 | ∏ | 选择特定的列 |
并集 | ∪ | 组合两个兼容的关系 |
集合差 | − | 从一个关系中移除出现在另一个关系中的元组 |
笛卡尔积 | Χ | 将一个关系的每一行与另一个关系的每一行组合 |
重命名 | ρ | 重命名属性或关系 |
选择操作 (σ)
选择操作就像给你的数据库加上X光视力。它允许你基于特定条件过滤行。
语法:σ<条件>(关系)
假设我们有一个名为 Heroes
的表:
| 名称 | 能力 | 年龄 |
|---------|-------------|------|
| Bruce | 智力 | 35 |
| Clark | 飞行 | 30 |
| Diana | 力量 | 5000 |
| Barry | 速度 | 28 |
如果我们想找到所有年龄小于100岁的英雄:
σ 年龄 < 100 (Heroes)
这将给我们:
| 名称 | 能力 | 年龄 |
|---------|-------------|------|
| Bruce | 智力 | 35 |
| Clark | 飞行 | 30 |
| Barry | 速度 | 28 |
看?我们已经过滤掉了Diana,我们那位永恒不变的神奇女侠!
投影操作 (∏)
投影操作就像拥有一个缩小射线。它允许你选择特定的列,减少你的关系的宽度。
语法:∏<属性列表>(关系)
使用我们的 Heroes
表,如果我们只需要名称和能力:
∏ 名称, 能力 (Heroes)
结果:
| 名称 | 能力 |
|---------|-------------|
| Bruce | 智力 |
| Clark | 飞行 |
| Diana | 力量 |
| Barry | 速度 |
我们已经缩小了我们的表,只关注我们所需的信息!
并集操作 (∪)
并集操作就像龙珠Z中的融合——它组合了两个兼容的关系。
语法:关系1 ∪ 关系2
假设我们有一个名为 Sidekicks
的另一个表:
| 名称 | 能力 | 年龄 |
|---------|--------|------|
| Robin | 杂技 | 22 |
| Jimmy | 无 | 25 |
我们可以组合 Heroes
和 Sidekicks
:
Heroes ∪ Sidekicks
结果:
| 名称 | 能力 | 年龄 |
|---------|-------------|------|
| Bruce | 智力 | 35 |
| Clark | 飞行 | 30 |
| Diana | 力量 | 5000 |
| Barry | 速度 | 28 |
| Robin | 杂技 | 22 |
| Jimmy | 无 | 25 |
现在我们有一个超级团队!
集合差 (−)
集合差就像拥有一个消解射线。它从一个关系中移除出现在另一个关系中的元组。
语法:关系1 − 关系2
如果我们想找到不是侧写手的英雄:
Heroes − Sidekicks
这将给我们原始的 Heroes
表,因为它们中没有一个是 Sidekicks
表中的。
笛卡尔积 (Χ)
笛卡尔积就像创建一个每个英雄都会遇到每个侧写手的平行宇宙。
语法:关系1 Χ 关系2
Heroes Χ Sidekicks
这将产生一个包含每个可能的英雄和侧写手组合的表。这是一个很大的表,所以我就不展示全部内容了,这里是一个片段:
| H名称 | H能力 | H年龄 | S名称 | S能力 | S年龄 |
|---------|-------------|-------|-------|--------|------|
| Bruce | 智力 | 35 | Robin | 杂技 | 22 |
| Bruce | 智力 | 35 | Jimmy | 无 | 25 |
| Clark | 飞行 | 30 | Robin | 杂技 | 22 |
| Clark | 飞行 | 30 | Jimmy | 无 | 25 |
...
重命名操作 (ρ)
重命名操作就像拥有改变现实的能力。它允许你更改属性或关系的名称。
语法:ρ 新名称 (旧名称)
如果我们想将 Power
属性重命名为 Superpower
:
ρ Superpower←Power (Heroes)
结果:
| 名称 | 超能力 | 年龄 |
|---------|-------------|------|
| Bruce | 智力 | 35 |
| Clark | 飞行 | 30 |
| Diana | 力量 | 5000 |
| Barry | 速度 | 28 |
关系演算
现在,作为我们的最后一个表演,让我们简要地触及关系演算。如果关系代数是关于“如何”获取数据,那么关系演算就是关于“什么”数据要获取。它是一种声明性的指定数据库查询的方式。
有两种类型:
- 元组关系演算 (TRC)
- 域关系演算 (DRC)
例如,在TRC中,要找到所有能力为“飞行”的英雄:
{H | H ∈ Heroes ∧ H.能力 = "飞行"}
这表示“给我所有从Heroes中选择的元组H,其中H的能力是飞行。”
就这样,年轻的帕德瓦人!你们的数据库技能已经升级。记住,能力越大,责任越大——明智地使用这些关系代数操作,你很快就会像一个专业人士那样查询数据库。现在去精确地组织你的数据,成为一个真正的超级英雄吧!
Credits: Image by storyset