理解关系代数中的除法

###Relational Algebra - Division
关系代数中的除法一般用来解决涉及“所有”这一关键词的问题。对于关系r和s,   r ÷ s \ r \div s  r÷s 即是找到所有与【所有s中的元组】有联系的r中的元组。换个说法的话就是:找到所有这样的【关系r的元组】,它和每一个关系s中的元组都有联系。

比如有如下两个关系

Taken (StudentID, CourseID)
Course (CourseID)

Taken表记录学号为StudentID的学生选修了课程编号为CourseID的课程。
Course表记录了CourseID(省略了课程名称之类的信息,简化问题)

要找到所有选修了所有课程的学生,就适合用除法来做。
通过除法的定义式来体会一下其工作过程。
  r ÷ s = π R − S ( r ) − π R − S ( ( π R − S ( r ) × s ) − r ) \ r \div s = \pi_{R-S}(r) - \pi_{R-S}((\pi_{R-S}(r) \times s) - r)  r÷s=πRS(r)πRS((πRS(r)×s)r)

对于上面的例子

r = Taken, s = Course
R = {StudentID, CourseID}
S = {CourseID}

考虑这样的数据

Taken = 
|StudentID|CourseID|
|--|--|
|11|a|
|11|b|
|11|c|
|22|a|
|33|b|,
Course = 
|CourseID|
|-|
|a|
|b|
|c|

π R − S ( r ) × s \pi_{R-S} ( r) \times s πRS(r)×s 得到的是所有StudentID和所有CourseID的笛卡尔乘积。

|StudentID|CourseID|
|--|--|
|11|a|
|11|b|
|11|c|
|22|a|
|22|b|
|22|c|
|33|a|
|33|b|
|33|c|

π R − S ( ( π R − S ( r ) × s ) − r ) \pi_{R-S}((\pi_{R-S} (r) \times s) - r) πRS((πRS(r)×s)r) 得到的是在上一步的结果中去掉r自身所有的元组,然后再对R-S属性集投影。换句话说,就是所有理论上存在的StudentID和CourseID的组合中,不在实际情况中的组合,我们取这样的组合的StudentID。也就是没有选修所有课程的学生。

内层的差运算结果:

|StudentID|CourseID|
|--|--|
|22|b|
|22|c|
|33|a|
|33|c|

投影结果:

|StudentID|
|--|
|22|
|33|

π R − S ( r ) − π R − S ( ( π R − S ( r ) × s ) − r ) \pi_{R-S}(r) - \pi_{R-S}((\pi_{R-S}(r) \times s) - r) πRS(r)πRS((πRS(r)×s)r) 最后一步用减法得到所有选修了所有课程的学生。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值