第3章 · 播客 第2集

数据库系统 · 关系代数八种运算

🎙️ 本集播客第2集:并、交、差、笛卡尔积、投影、选择、θ连接、除法逐一过,笛卡尔积 6 列 6 元组的例题当场算,θ连接与自然连接一字之差辨清楚,除法用原文例题一步步演算到只留一个元组。 语音由微软 Edge 神经网络语音预生成(女声·晓伊,男声·云希)。点击下方任意对话可直接从该句开始播,当前句朗读时下一句已预先加载,无缝衔接。
🎙️ 第3章播客 第2集
⬇ 下载本集 点击播放
阿明
小雅姐,关系代数这些符号我看一眼就头大,是不是背背概念就行?
小雅
背概念做不对题。八种基本运算主要有并、交、差、笛卡尔积、选择、投影、连接和除法运算,我一种一种给你过,每种都带判断角度。先说前提:并、交、差要求两个关系有相同的元,也就是列数相同才能比。
阿明
并运算是什么?
小雅
对。并,计算两个关系在集合理论上的并集。给出关系 R 和 S,R 并 S 的元组包括 R 和 S 所有元组的集合。显然 R 并 S 等于 S 并 R,可交换。差,计算两个关系的区别的集合,R 减 S 的元组包括 R 中有而 S 中没有的元组的集合。注意差不可交换,R 减 S 和 S 减 R 一般不相等。交,计算两个关系集合理论上的交集,R 交 S 的元组包括 R 和 S 相同元组的集合,显然 R 交 S 等于 R 减去括号 R 减 S,也等于 S 减去括号 S 减 R。
阿明
交居然可以用差推出来,R 交 S 等于 R 减去 R 减 S。这个式子会考吗?
小雅
会,出法是「用差表示交」,就考这两个等价式子。接下来笛卡尔积,这个要动手算,光背公式没用。令 R 为有 m 元的关系,S 为有 n 元的关系,则 R 乘 S 是 m 加 n 元的元组的集合,其前 m 个元素来自 R 的一个元组,后 n 个元素来自 S 的一个元组。若 R 有 u 个元组,S 有 v 个元组,则 R 乘 S 有 u 乘 v 个元组。
阿明
原文那个例子,4 加 2 等于 6 列,3 乘 2 等于 6 条。
小雅
对。原文例子:对关系 R 与关系 S 做笛卡尔积运算,其结果有 4 加 2 等于 6 列,元组数量有 3 乘 2 等于 6 条。所以笛卡尔积的行数、列数各怎么算要分清:列数相加,行数相乘。选项里把「6 列」写成「6 行」就是坑,这两个数字在原文例子里恰好都是 6,最容易让人以为无所谓。
阿明
投影和选择,一个是列一个是行?这个我倒记得。
小雅
记得方向还不够,要背准原文表述。投影,从一个关系中抽取指明的属性,也就是列。原文例子是对关系 R 做投影操作,对第 1 列与第 2 列做投影,这里有个专门提醒:在关系代数操作中涉及的数字代表的是列号,不是别的。选择则相反,F 表示选择条件,是一个逻辑表达式,由逻辑运算符加算术表达式构成,选择运算是从元组也就是行的角度进行的运算。投影对列、选择对行,这对反义关系是必考点。
阿明
连接呢?我记得有个θ符号,练习题正好考到。
小雅
练习题第 4 题问:从两个关系的笛卡尔积中选取属性间满足一定条件的元组的操作是什么?答案是 θ 连接。原文定义:θ 连接从两个关系的笛卡儿积中选取属性之间满足一定条件的元组,其中 A 和 B 分别为 R 和 S 上元数相等且可比的属性组。这句话的关键词是「属性之间满足一定条件」,四个干扰项要逐个排掉:投影是抽列,选择是在一个关系里选行,自然连接是 θ 连接的特殊情况。
阿明
θ 是什么?等值连接和自然连接又怎么区分?
小雅
对。θ 是那个比较运算符,可以是等号、大于、小于等等。θ 为等号时的连接称为等值连接。再进一步,如果两个关系中进行比较的分量必须是相同的属性组,并且在结果中将重复的属性去掉,则称为自然连接。所以三级递进要记牢:θ 连接是总类,θ 取等号是等值连接,等值连接再加上「比较分量相同且去掉重复属性」才是自然连接。原文例子是对关系 R 与关系 S 做自然连接操作。
阿明
杀招在哪?我觉得就是自然连接和等值连接那条边界。
小雅
对。等值连接不去重复属性,自然连接必须去掉重复属性,这是两者唯一的分界线,题目常把「去掉重复属性」安到等值连接头上来骗你。反过来,说「自然连接要求比较分量必须相同」,对,这是它和一般等值连接的区别。
阿明
最后是除法,这个我完全没辙。
小雅
除法是八种里最难的,我带原文例题一步步算,这道题原文本身就给了完整求解过程,考试直接考你能不能复现它。先看定义:设有关系 R(X,Y) 与关系 S(Z),Y 和 Z 具有相同的属性个数,且对应属性出自相同域。关系 R(X,Y) 除以 S(Z) 所得的商关系是关系 R 在属性 X 上投影的一个子集,该子集和 S(Z) 的笛卡尔积必须包含在 R(X,Y) 中,记为 R 除 S。
阿明
用人话翻译一下?
小雅
通俗说就是:找一个 X 值,它必须配齐 S 里全部的 Y 值。配不齐的就不要。现在上原文例题,R 有属性 U1、U2、U3、U4,S 有属性 U3、U4。第一步,按除运算定义要求确定 X、Y、Z 属性集合。Z 是 S 中全部属性的集合,即 Z 等于大括号 U3、U4;Y 是关系 R 中的属性集合,由于 Y 等于 Z,因此 Y 等于 U3、U4;剩下的 X 等于 U1、U2。也就是说,R 除 S 结果集只包含属性 U1 和 U2。
阿明
第二步就是拿 R 里的 U1、U2 值去试?怎么个试法?
小雅
R 在 U1、U2 上投影得到两个元组:a、b 和 c、a。第二步,将这两个元组分别与关系 S 作笛卡尔积。第三步逐个检查:元组 a、b 与 S(Z) 的笛卡尔积被完整包含在 R(X,Y) 中;而元组 c、a 与 S(Z) 的笛卡尔积有一个元组未被包含在 R(X,Y) 中,也就是它没配齐。所以结果集中只有元组 a、b。
阿明
所以除法的判断标准就一句话:X 的值必须和 S 里所有组合都能配对成功,缺一个就淘汰。
小雅
对,这就是「包含在 R 中」的含义。考试给两个小关系让你算 R 除 S,你就把候选 X 值逐个拿来配 S 的全部元组,全配上的留下,缺一个的扔掉,不会超过三个候选,手算很快。除法常考的应用场景是「查询选修了全部课程的学生」,这类全称量词问题翻译成关系代数就是除法。
阿明
除法还常和什么一起出?
小雅
常考「哪些运算可以由其他运算导出」这类概念题,比如交可以由差导出;还会问「关系代数的基本运算有哪些」,就是开头那八种:并、交、差、笛卡尔积、选择、投影、连接和除法。判断题偶尔会问「选择和投影都作用于单个关系吗」——选择、投影是单关系的,笛卡尔积、连接、除是双关系的,这个维度帮你排除选项。
阿明
单关系:选择、投影;双关系:并交差要求同列数,笛卡尔积、连接、除法。这个分类清楚多了,碰到没见过的运算名就往这八种里套,套不进去的直接判为干扰项,省得犹豫。
阿明
顺便问一句,这八种里有几个能相互推导?我怕考「哪些是基本运算」这种题。
小雅
已经说过了,交可以由差导出,R 交 S 等于 R 减去括号 R 减 S。判断题再往深问一步:交、连接这类都被称为可以由基本运算导出的运算,但按原文的口径,八种统统列在「基本运算主要有」这一句里,照原文背,别自己发明分类。
小雅
本集必背:并交差要求两关系列数相同,交可写成差,R 交 S 等于 R 减 R 减 S;笛卡尔积列数相加、行数相乘,原文例题 4 加 2 等于 6 列、3 乘 2 等于 6 条;投影对列、选择对行,数字代表列号;θ 连接是从笛卡尔积中选属性间满足条件的元组,θ 为等号是等值连接,比较分量相同且去掉重复属性才是自然连接;除法商关系是 R 在 X 上投影的子集,该子集与 S 的笛卡尔积必须包含在 R 中,例题答案只有元组 a、b。
小雅
对,除法之外还要防着「以下不属于关系代数基本运算的是」这种题,拿 SQL 的语句来冒充运算符,八种之外的都是假的。
阿明
除法「配齐才留」这个口诀好记,我终于不用死记公式了。下一集是范式吗?
小雅
对,函数依赖、候选码、1NF 到 BCNF 逐级判定,那是本章分值最重的演算题,两级封锁协议都要给它让路,我会把每级的判定条件和原文例题一个一个算给你听。