我们有3个关系:
Students(sid, sname)
Courses(cid, cname, dept)
take(sid, cid, grade)
谁可以为我描述这些关系代数?
答案 0 :(得分:1)
根据大多数流行数据库书籍的定义,第一个表达式是不正确的或未定义的,因为除法的第二个操作数应该具有属性,这些属性是第一个操作数的属性的子集(第一个段落具有根据以下评论进行了编辑)。
第二个表达式是一个常规分部,它返回已经全部“CS”课程的学生的sid
。
第三个表达式首先使用sid
所有'CS'课程计算所有cid
学生的笛卡尔积,并从那些集合中删除 all (sid,cid)
中的take
对。因此,最后,该集合将包含夫妻sid
,cid
,其中sid
标识学生cid
'CS'课程不那个学生带走了。最后,这个集合被预测在sid
之上,因此该表达式将返回所有未参加所有“CS”课程的学生。换句话说,第二个表达式的补充。
被修改
第四个表达式 等同于第二个表达式,这很容易证明:考虑到这个表达式只是等于:
π sid (学生) - (第三个表达)
并且由于第三个表达式返回所有未参加所有'CS'课程的学生的sid
,从我们再次找到的所有学生的sid
中减去这一组(和只有)已经全部“CS”课程的学生。换句话说,补语的补语,即由除法得到的原始集合,即第二个表达式。