作为一名自诩为南通大学头号学术说唱手的学习者,我在理解数据库中“关系代数”这一概念时曾陷入困境。为了让抽象的理论更易消化,我决定借用中文说唱圈顶流厂牌 DigiGhetto 的成员信息与作品数据,将枯燥的运算规则转化为鲜活的现实案例。毕竟,把“查询表格”想象成“筛选rapper”,学习也会变得带感起来。
关系代数本质上是数据库的“查询语言”,它通过一系列数学运算来处理结构化的表格数据(即“关系”)。接下来的内容将以 DigiGhetto 成员的相关属性构建多个数据表,并逐步演示各类核心运算的操作逻辑与结果呈现。
集合运算基于传统集合论思想,要求参与运算的两个关系具备相同的“目数”——即列数一致,且对应列的属性来自同一语义域(例如都是“成员名”“音乐风格”等)。我们先定义两个基础关系表用于演示:
| 成员名 | 音乐风格 | 代表作 |
|---|---|---|
| MacOvaSeas | Autotune旋律 | 《天上一天》 |
| A$EN | 叙事硬核 | 《Run this game》 |
| Thomeboydontkill | 多元融合 | 《1 AM》 |
| TOYOKI | 朋克说唱 | 《暴雨》 |
| KIV | 元素融合 | 《太子时间》 |
| MULA SAKEE | 实验性说唱 | 《永玄定鼎》 |
| 成员名 | 音乐风格 | 代表作 |
|---|---|---|
| SETI | 街头陷阱 | 《Forget it》 |
| TOYOKI | 朋克说唱 | 《暴雨》 |
定义:合并两个关系中的所有元组(行),去除重复项后形成新关系,保持原有属性数量不变(仍为3目)。
规则说明:
运算结果(R ∪ S):
| 成员名 | 音乐风格 | 代表作 |
|---|---|---|
| MacOvaSeas | Autotune旋律 | 《天上一天》 |
| A$EN | 叙事硬核 | 《Run this game》 |
| Thomeboydontkill | 多元融合 | 《1 AM》 |
| TOYOKI | 朋克说唱 | 《暴雨》 |
| KIV | 元素融合 | 《太子时间》 |
| MULA SAKEE | 实验性说唱 | 《永玄定鼎》 |
| SETI | 街头陷阱 | 《Forget it》 |
定义:提取同时存在于 R 和 S 中的元组,构成新的3目关系。
规则说明:
运算结果(R ∩ S):
| 成员名 | 音乐风格 | 代表作 |
|---|---|---|
| TOYOKI | 朋克说唱 | 《暴雨》 |
定义:获取属于 R 但不属于 S 的元组,结果仍为3目关系,体现 R 独有的数据。
规则说明:
运算结果(R - S):
| 成员名 | 音乐风格 | 代表作 |
|---|---|---|
| MacOvaSeas | Autotune旋律 | 《天上一天》 |
| A$EN | 叙事硬核 | 《Run this game》 |
| Thomeboydontkill | 多元融合 | 《1 AM》 |
| KIV | 元素融合 | 《太子时间》 |
| MULA SAKEE | 实验性说唱 | 《永玄定鼎》 |
定义:将 R 的每一行与 S 的每一行进行全组合,生成的新关系包含 R 与 S 属性总数之和(3+3=6目)。
规则说明:
运算结果(节选前6条):
| R.成员名 | R.音乐风格 | R.代表作 | S.成员名 | S.音乐风格 | S.代表作 |
|---|---|---|---|---|---|
| MacOvaSeas | Autotune旋律 | 《天上一天》 | SETI | 街头陷阱 | 《Forget it》 |
| MacOvaSeas | Autotune旋律 | 《天上一天》 | TOYOKI | 朋克说唱 | 《暴雨》 |
| A$EN | 叙事硬核 | 《Run this game》 | SETI | 街头陷阱 | 《Forget it》 |
| A$EN | 叙事硬核 | 《Run this game》 | TOYOKI | 朋克说唱 | 《暴雨》 |
| Thomeboydontkill | 多元融合 | 《1 AM》 | SETI | 街头陷阱 | 《Forget it》 |
| Thomeboydontkill | 多元融合 | 《1 AM》 | TOYOKI | 朋克说唱 | 《暴雨》 |
相较于集合运算,关系运算符专为数据库设计,支持更灵活的数据操作,如选择特定行、投影指定列、连接多张表等。为了展示这些功能,我们需要引入扩展后的数据表:
| 成员名 | 音乐风格 | 代表作 | 出生日期 | 家乡(数据可能有出入,仅供参考) |
|---|---|---|---|---|
| MacOvaSeas | Autotune旋律 | 《天上一天》 | 1998-05 | 江油 |
| A$EN | 叙事硬核 | 《Run this game》 | 1999-08 | 咸丰 |
| Thomeboydontkill | 多元融合 | 《1 AM》 | 2000-02 | 简阳 |
| TOYOKI | 朋克说唱 | 《暴雨》 | 2001-03 | 凉山 |
| KIV | 元素融合 | 《太子时间》 | 1999-11 | 珠海 |
| MULA SAKEE | 实验性说唱 | 《永玄定鼎》 | 1997-09 | 成都 |
| SETI | 街头陷阱 | 《Forget it》 | 2002-07 | 南部县 |
| 成员名 | 作品名 | 发行年份 | 播放量(万) |
|---|---|---|---|
| A$EN | 《Run this game》 | 2025 | 800 |
| TOYOKI | 《暴雨》 | 2022 | 800 |
| Thomeboydontkill | 《1 AM》 | 2022 | 950 |
以上数据结构为后续的关系运算提供了丰富上下文。通过对 DigiGhetto 成员及其作品的多维度建模,我们可以直观地看到数据库如何利用数学逻辑完成复杂查询任务。这种以真实场景映射抽象理论的方式,有助于加深对关系代数本质的理解。
[此处为图片2]以下是对关系代数中四种基本运算的详细解析,包含选择、投影、连接与除法运算的应用示例。文中涉及的数据以音乐人及其作品信息为基础构建关系表,并通过形式化表达展示操作过程和结果。
定义:从给定关系中筛选出满足特定条件的元组(即行),不改变原有属性结构,仅对记录进行过滤。
符号说明:使用希腊字母 σ 表示选择运算,条件部分由逻辑表达式构成,支持比较符如 >、<、=、≠,以及逻辑连接词 ∧(且)、∨(或)。
规则特点:只影响行的选择,列保持完整;输出结果仍为原关系的子集,结构一致。
应用示例:查询“2000年后出生且家乡属于南方城市”的成员。
设定条件:出生日期 > '2000-01' ∧ 家乡 ∈ {'成都','重庆','杭州','广州','珠海'}
运算表达式:
σ_出生日期>'2000-01' ∧ 家乡 IN ('成都','重庆','杭州','广州','珠海')(M)
结果表:
| 成员名 | 音乐风格 | 代表作 | 出生日期 | 家乡 |
|---|---|---|---|---|
| Thomeboydontkill | 多元融合 | 《1 AM》 | 2000-02 | 简阳 |
| TOYOKI | 朋克说唱 | 《暴雨》 | 2001-03 | 凉山 |
| SETI | 街头陷阱 | 《Forget it》 | 2002-07 | 南部县 |
定义:从关系中提取指定的一组属性列,形成新的关系结构,属性数量减少,可能去除重复元组。
符号说明:用 π 表示投影运算,括号内列出所需保留的属性名称,多个属性间以逗号分隔。
规则特点:仅保留指定列;若结果中存在完全相同的行,则自动去重。
应用示例:提取所有成员的“成员名 + 家乡”信息,并去除重复项。
运算表达式:
π_成员名, 家乡(M)
结果表:
| 成员名 | 家乡 |
|---|---|
| MacOvaSeas | 江油 |
| A$EN | 咸丰 |
| Thomeboydontkill | 简阳 |
| TOYOKI | 凉山 |
| KIV | 珠海 |
| MULA SAKEE | 成都 |
| SETI | 南部县 |
定义:基于两个关系的笛卡尔积,依据属性间的匹配条件筛选符合条件的组合元组,实现数据关联。核心步骤为“先组合,后筛选”。
前提条件:两关系需具备可比较的公共属性,例如本例中的“成员名”字段。
常见类型:等值连接、自然连接、外连接。
筛选“成员名相等”的元组,保留双方全部属性,包括重复的连接字段(如两个“成员名”列)。
运算表达式:
M ∞M.成员名 = P.成员名 P
结果表:
| M.成员名 | 音乐风格 | 代表作 | 出生日期 | 家乡 | P.成员名 | 作品名 | 发行年份 | 参考播放量(万) |
|---|---|---|---|---|---|---|---|---|
| MacOvaSeas | Autotune旋律 | 《天上一天》 | 1998-05 | 江油 | MacOvaSeas | 《天上一天》 | 2023 | 1500 |
| A$EN | 叙事硬核 | 《Run this game》 | 1999-08 | 咸丰 | A$EN | 《Run this game》 | 2025 | 800 |
| Thomeboydontkill | 多元融合 | 《1 AM》 | 2000-02 | 简阳 | Thomeboydontkill | 《1 AM》 | 2023 | 950 |
| TOYOKI | 朋克说唱 | 《暴雨》 | 2001-03 | 杭州 | TOYOKI | 《暴雨》 | 2022 | 800 |
| KIV | 元素融合 | 《太子时间》 | 1999-11 | 珠海 | KIV | 《太子时间》 | 2024 | 500 |
| MULA SAKEE | 实验性说唱 | 《永玄定鼎》 | 1997-09 | 成都 | MULA SAKEE | 《永玄定鼎》 | 2025 | 700 |
| SETI | 街头陷阱 | 《Forget it》 | 2002-07 | 南部县 | SETI | 《Forget it》 | 2024 | 600 |
一种特殊的等值连接,系统自动识别同名且语义一致的属性(如“成员名”)进行匹配,并在结果中合并该字段,仅保留一份。
运算结果将消除冗余列,提升数据整洁度。
结果表:
| 成员名 | 音乐风格 | 代表作 | 出生日期 | 家乡 | 作品名 | 发行年份 | 参考播放量(万) |
|---|---|---|---|---|---|---|---|
| MacOvaSeas | Autotune旋律 | 《天上一天》 | 1998-05 | 江油 | 《天上一天》 | 2023 | 1500 |
| A$EN | 叙事硬核 | 《Run this game》 | 1999-08 | 咸丰 | 《Run this game》 | 2025 | 800 |
| Thomeboydontkill | 多元融合 | 《1 AM》 | 2000-02 | 简阳 | 《1 AM》 | 2023 | 950 |
| TOYOKI | 朋克说唱 | 《暴雨》 | 2001-03 | 凉山 | 《暴雨》 | 2022 | 800 |
| KIV | 元素融合 | 《太子时间》 | 1999-11 | 珠海 | 《太子时间》 | 2023 | 500 |
| MULA SAKEE | 实验性说唱 | 《永玄定鼎》 | 1997-09 | 成都 | 《永玄定鼎》 | 2025 | 700 |
| SETI | 街头陷阱 | 《Forget it》 | 2002-07 | 南部县 | 《Forget it》 | 2024 | 600 |
保留左表(M)中的所有元组,无论右表(P)是否有匹配项;对于无匹配的情况,右表对应字段填充 NULL 值。
在当前示例中,由于每个成员在作品表 P 中均有对应记录,因此其结果与自然连接相同。
定义:设有关系 R(X,Y) 和 S(Y),除法运算的结果是 R 中那些 X 属性值所对应的 Y 象集完全包含 S 中所有 Y 值的集合。
通俗理解:找出“满足 S 所有条件”的 X 值。
执行步骤:
① 提取 R 中每个 X 值对应的 Y 集合(象集);
② 筛选出其象集包含 S 全部 Y 值的 X。
构造专用表 —— 关系 R(成员 - 合作曲目表):
| 成员名 | 合作曲目 |
|---|---|
| A$EN | 《江浙沪》 |
| A$EN | 《MAYDAY》 |
| TOYOKI | 《江浙沪》 |
| TOYOKI | 《MAYDAY》 |
| Thomeboydontkill | 《江浙沪》 |
| Thomeboydontkill | 《Julie》 |
| KIV | 《江浙沪》 |
| KIV | 《MAYDAY》 |
| MULA SAKEE | 《江浙沪》 |
| MULA SAKEE | 《MAYDAY》 |
假设 S = {《江浙沪》, 《MAYDAY》},则求 R ÷ S 即为查找同时参与这两首歌曲的合作艺人。
经分析可知:A$EN、TOYOKI、KIV、MULA SAKEE 满足条件。
[此处为图片5]表6:关系S(热门合作曲目表)
| 合作曲目 |
|---|
| 《江浙沪》 |
| 《MAYDAY》 |
运算步骤:
筛选出象集中包含 S 中全部曲目(即《江浙沪》和《MAYDAY》)的成员。
[此处为图片1]结果表(R÷S):
| 成员名 |
|---|
| A$EN |
| TOYOKI |
| KIV |
| MULA SAKEE |
各类运算对比总结:
| 运算类型 | 核心作用 | 关键特点 |
|---|---|---|
| 集合运算符 | 表之间的元组组合 / 筛选 | 要求两表结构一致 |
| 选择运算 | 筛行(基于条件进行元组筛选) | 不改变属性,仅减少元组数量 |
| 投影运算 | 提列(提取指定属性) | 可能改变属性数量,元组可能因去重而减少 |
| 连接运算 | 实现多表关联查询 | 需要公共属性,支持多种连接方式 |
| 除运算 | 用于满足“所有”条件的查询 | 基于象集匹配,适用于全值包含场景 |
扫码加好友,拉您进群



收藏
