数据库关系代数运算之除操作

常用求解关键词:

“查询…全部的/所有的…”

前提条件:

给定关系R为n度关系,关系s为m度关系。如果可以进行R÷S关系运算,那么,s中的所有属性是R中属性的真子集(R中属性多与s中属性)

定义

定义R÷S需要从属性、元组两个角度来定义。我们从以下两个角度分别来看一看是怎么定义的。

1). R÷S的结果属性:
 R中属性去掉与S相同的属性,剩下来的属性

 2). R÷S元组的形成:
 ①取出R÷S中的某一元组,让它和S中的<font color=cc3333>每一个元组</font>组合起来,都必须是R中的元组
 ②将R÷S中所有元组重复①的操作,得出最终的R÷S

举例

抽象

例: 给定关系R和S求R÷S

RRR
A1A2A3
abc
dbc
aec
aef
dbf
aeg
aeh
abl
s
A3
c
f
g
h

(因为Markdown不提供单元格合并语法。小编还未学过HTML,故首行未合并)

步骤:
step1:去除R中与S相同的属性,得到R*。
step2:去掉重复元组,得到一个初步的R÷S。
step3:将step1得到的所有元组与S中的每一个元组进行组合,得到新元组,判断是否属于R。

step1:

R*R*
A1A2
ab
db
ae
ae
db
ae
ae
ab

step2:

R÷SR÷S
A1A2
ab
db
ae

step3:
将三个元组<a,b>,<d,b>,<a,e>分别与S中的每一个元组组合。例如:以<a,b>为例,组成
<a,b,c>
<a,b,f>
<a,b,g>
<a,b,h>
其中<a,b,f>,<a,b,g>,<a,b,h>并不是R中元组,所有<a,b>并不是R÷S元组。同理判断<d,b>,<a,e>这两个元组。
最后得出R÷S是

R÷SR÷S
A1A2
ae

语义

这里给出哈尔滨工业大学,《数据库系统》举出的实例

如何解答这个题目呢?
相信很多同学和我一样,第一眼看上去会很茫然。虽然知道需要运用到除法运算,但并不知道如何使用除法运算。但是我们会发现,若某个学生和表C组合起来都在表SC中,则得到的那个学生就是要找的学生(这个学生选修了所有课程)

观察需要涉及到的属性:
学生学号、课程号(课程)

C#是相同的属性,是连接两个表的属性
而S#则是我们所要求出的
除运算则是筛选出所有与(表C中所有元素)都匹配的那个元素

在这里插入图片描述
在这里插入图片描述

总结:
给定具体含义的表时,往往需要经过投影处理,取出我们需要的属性,然后将处理过的表进行运算

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐