复关系代数?

时间:2016-02-13 12:41:17

标签: sql database database-design relational-database relational-algebra

我们有3个关系:

Students(sid, sname)
Courses(cid, cname, dept)
take(sid, cid, grade)

谁可以为我描述这些关系代数?

enter image description here

相当于第二个: enter image description here

1 个答案:

答案 0 :(得分:1)

根据大多数流行数据库书籍的定义,第一个表达式是不正确的或未定义的,因为除法的第二个操作数应该具有属性,这些属性是第一个操作数的属性的子集(第一个段落具有根据以下评论进行了编辑)。

第二个表达式是一个常规分部,它返回已经全部“CS”课程的学生的sid

第三个表达式首先使用sid所有'CS'课程计算所有cid学生的笛卡尔积,并从那些集合中删除 all (sid,cid)中的take对。因此,最后,该集合将包含夫妻sidcid,其中sid标识学生cid'CS'课程那个学生带走了。最后,这个集合被预测在sid之上,因此该表达式将返回所有未参加所有“CS”课程的学生。换句话说,第二个表达式的补充

被修改

第四个表达式 等同于第二个表达式,这很容易证明:考虑到这个表达式只是等于:

π sid (学生) - (第三个表达)

并且由于第三个表达式返回所有未参加所有'CS'课程的学生的sid,从我们再次找到的所有学生的sid中减去这一组(和只有)已经全部“CS”课程的学生。换句话说,补语的补语,即由除法得到的原始集合,即第二个表达式。