数据库—除操作(Division)
目录数据库关系代数运算之除操作常用求解关键词: 前提条件:定义举例抽象语义数据库关系代数运算之除操作常用求解关键词:“查询…全部的/所有的…”前提条件:给定关系R为n度关系,关系s为m度关系。如果可以进行R÷S关系运算,那么,s中的所有属性是R中属性的真子集(R中属性多与s中属性)定义定义R÷S需要从属性、元组两个角度来定义。我们从以下两个角度分别来看一看是怎么定义的。1). R...
数据库关系代数运算之除操作
常用求解关键词:
“查询…全部的/所有的…”
前提条件:
给定关系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
R | R | R |
---|---|---|
A1 | A2 | A3 |
a | b | c |
d | b | c |
a | e | c |
a | e | f |
d | b | f |
a | e | g |
a | e | h |
a | b | l |
s |
---|
A3 |
c |
f |
g |
h |
(因为Markdown不提供单元格合并语法。小编还未学过HTML,故首行未合并)
步骤:
step1:去除R中与S相同的属性,得到R*。
step2:去掉重复元组,得到一个初步的R÷S。
step3:将step1得到的所有元组与S中的每一个元组进行组合,得到新元组,判断是否属于R。
step1:
R* | R* |
---|---|
A1 | A2 |
a | b |
d | b |
a | e |
a | e |
d | b |
a | e |
a | e |
a | b |
step2:
R÷S | R÷S |
---|---|
A1 | A2 |
a | b |
d | b |
a | e |
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÷S | R÷S |
---|---|
A1 | A2 |
a | e |
语义
这里给出哈尔滨工业大学,《数据库系统》举出的实例
如何解答这个题目呢?
相信很多同学和我一样,第一眼看上去会很茫然。虽然知道需要运用到除法运算,但并不知道如何使用除法运算。但是我们会发现,若某个学生和表C组合起来都在表SC中,则得到的那个学生就是要找的学生(这个学生选修了所有课程)
观察需要涉及到的属性:
学生学号、课程号(课程)
C#是相同的属性,是连接两个表的属性
而S#则是我们所要求出的
除运算则是筛选出所有与(表C中所有元素)都匹配的那个元素
总结:
给定具体含义的表时,往往需要经过投影处理,取出我们需要的属性,然后将处理过的表进行运算
更多推荐
所有评论(0)