数据库关系代数-除运算R÷S到底该如何计算?

引入

关系代数中有五种基本的代数运算包括并、差、笛卡尔积、投影和选择。这五种运算比较简单易懂,学习起来很丝滑流畅,但是在看到除运算这段冗长的定义和公式就有些摸不到头脑(⊙_⊙)。

定义:

除运算是同时从关系的水平方向和垂直方向进行运算。给定关系R(X,Y)和S(Y,Z), X、Y、Z为属性组。R÷S应当满足元组在X上的分量值x的象集Yx包含关系S在属性组Y上 投影的集合。

公式:
R ÷ S = { t n [ X ] ∣ t n ∈ R ∧ π y ( S ) ⊆ Y x } R \div S= \left\{ t^{n}\left[ X \right] |t^{n}\in R\land\pi _{y}(S)\subseteq Y_{x}\right\} R÷S={tn[X]tnRπy(S)Yx}
不知道你是不是也会有眼前一黑的感觉,不过也不用着急,根据下面这个例子我们完全可以梳理明白这段定义到底是什么意思,并且以后可以通过定义和公式来正确的进行关系代数除运算。

实例

设有关系R、S如下两表,求R÷S。

R:

ABCD
abcd
abef
abhk
bdef
bddl
ckcd
ckef

S:

CD
cd
ef

我们先看定义的这一句话:

给定关系R(X,Y)和S(Y,Z), X、Y、Z为属性组。

这其中的XYZ都是属性组,那么为什么要用R(X,Y)和S(Y,Z)这种形式来表示呢。其实很简单,这么表示是为了说明Y属性组是两个关系共有的属性组(在实例中就是CD属性组),而X属性组就是关系R独有的属性组(在实例中就是AB属性组)。

OK,然后我们来看定义的第二句话:

R÷S应当满足元组在X上的分量值x的象集Yx包含关系S在属性组Y上投影的集合。

对于关系R,其在X(AB)上的分量值包括{(a,b),(b,d),(c,k)}。分量值x的象集是指什么呢?象集本质上是一次选择运算和投影运算,比如对(a,b)求象集就是在R中选择AB=(a,b)的行然后选择不是AB的列。

{(a,b),(b,d),(c,k)}的象集分别是:
分量(a,b)的象集={(c,d),(e,f),(h,k)}
分量(b,d)的象集={(e,f),(d,l)}
分量(c,k)的象集={(c,d),(e,f)}

关系S在属性组Y上的投影是{(c,d),(e,f)}

而分量(a,b)和(c,k)的象集都包含{(c,d),(e,f)},所以最后的除运算的结果是分量(a,b)和(c,k)的集合{(a,b),(c,k)}

重新把定义拆解组合一下可以这样写:

除运算最后的结果是关系R在X上的分量值的集合,这个集合要满足分量值的象集Yx包含关系S在属性Y上的投影

除运算步骤总结

  1. 找出属性组X和属性组Y:X(AB),Y(CD)
  2. 找出R在属性组X上的分量值的集合{(a,b),(b,d),(c,k)}
  3. 对每个分量值求象集
  4. 求关系S在Y上的投影
  5. 若象集包含投影,则把对应象集的分量值加入到最后的结果集合

除运算是用来干啥的?

经过上面的解析,我自己也捋顺了除运算该怎么计算,不过这时候又有了新的疑惑,我学这个除运算到底是用来干啥啊?
对于上边的实例,好像看不出来除运算的真实作用。下面我再给出一个新的实例,应该会更加直观一些。

新的实例
R:

学号姓名授课老师课程
001李云刘老师数据结构
001李云李老师操作系统
001李云林老师计算机组成原理
002明治马老师编译原理
002明治林老师计算机组成原理
003柯里刘老师数据结构
003柯里李老师操作系统

S:

授课老师课程
刘老师数据结构
李老师操作系统

ok我们来做除运算R÷S:

学号姓名
001李云
003柯里

可以发现我们从一张大表R经过除运算之后变成一个小表,这个小表是至少上了关系S指定的授课老师和指定课程的同学的集合。由此过程,我们是不是可以把除运算看作一个筛选的过程,关系S和关系R相同的属性组是筛选条件,而R是待筛选的表。

本质:
除运算其实是用来查询本表(R)中那些包含指定属性组记录(S)的记录的。比如上述例子,其实是来查询R表中至少选修了S中指定老师和课程的学生的学号和姓名信息。

常见问题
至少选修了李老师所有课程的学生信息


还是感觉对除运算的作用理解的不够清晰,大家如果有更好的解释希望可以说出来,我再进行修改。

  • 10
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值