【问题标题】:Complex Relational Algebra?复杂的关系代数?
【发布时间】:2016-02-13 12:41:16
【问题描述】:

我们有 3 个关系:

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

谁能帮我描述这些关系代数?

相当于第二个:

【问题讨论】:

  • 一个人看到两个负分?管理员检查一下。
  • 您希望我们为您完成家庭作业吗?
  • 重新投票请阅读鼠标悬停的图标。
  • 即使您将其分配为自己的作业,它仍然是作业。你试过什么?
  • www6.sanjesh.org/download/arshad94q/513-c.pdf 请参见第 11 页 @philipxy

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


【解决方案1】:

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

第二个表达式是一个正则除法,返回已参加所有“CS”课程的学生的sid

第三个表达式首先计算所有学生的sid 与所有“CS”课程的cid 的笛卡尔积,并从这些集合中删除所有(sid,cid)出现在take。因此,最后,该集合将包含 sidcid 夫妇,其中 sid 标识一个学生 cid 一个“CS”课程不是该学生参加的。最后,这个集合被投影到sid,因此这个表达式返回所有没有参加所有“CS”课程的学生。换句话说,第二个表达式的补码

已编辑

第四个表达式等价于第二个,这很容易证明:考虑这个表达式简单地等于:

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

并且由于第三个表达式返回所有未参加所有“CS”课程的学生的sid,从我们再次找到的所有学生的sid 中减去这个集合,所有(并且只有)学生参加了所有“CS”课程的人。也就是说,补码的补码,即除法得到的原集,也就是第二个表达式。

【讨论】:

  • 对不起,我添加了另一张图片。新图片怎么可能等同于第二张?这是一个复杂的公式。
  • @LoveComplexity & Renzo Wikipedia 是错误的。 Codd 的除法 R / S 定义在所有关系对上,并给出与 R / π 公共属性 (S) 相同的答案。 (参见他的Relational Completeness paper。) Date 误解并推广了具有 R 属性的版本,是 S 的超集。 (参见他的Database Explorations book Division chapter。)Date 的定义对 Codd 来说并不总是正确的。所以第一=第二。
  • @philipxy,谢谢,这很有趣,至少从历史的角度来看是这样。但是我认为 Date 定义是当前数据库课程中使用的,正如许多数据库书籍所证明的那样,例如: Molina-Ullman-Widom, Database Systems, 2nd ed, p.58; Ramakrishnan-Gehrke,数据库管理系统,第 3 版,第 109 页; Silberschatz-Korth-Sundarshan 数据库系统概念,第 6 版,第 250 页; Connolly-Bag,数据库系统,第 4 版,第 150 页; Abiteboul-Hull-Vianu,数据库基础,1995 年,第 99 页; Elmasri-Navathe,数据库系统基础,第 6 版,第 163 页。
  • @Renzo 但是第一个表达式有 S 的标题 不是 R 的子集。所以它没有使用 Date 的版本。所有这些定义 Date 版本的引用,在这种情况下都是 undefined 。只有维基百科允许任意关系,科德的版本,它很困惑。 “通常要求 S 的标头中的属性名称是 R 的子集”的实际原因是它的 Date 版本。对于 Codd 的版本,不是“因为否则操作的结果将始终为空”,因为它不会。相反,当没有公共属性时,结果为空。
  • @philipxy 好的,再次感谢,我会改写我的答案,所以,也许,您应该考虑更正维基百科页面?
猜你喜欢
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 2017-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
相关资源
最近更新 更多