【问题标题】:Relational algebra for one-to-many relations一对多关系的关系代数
【发布时间】:2013-03-11 21:44:00
【问题描述】:

假设我有以下关系:

Academic(academicID (PK), forename, surname, room)
Contact (contactID (PK), forename, surname, phone, academicNO (FK))

我正在使用 Java,我想了解符号的用法。

Π( relation, attr1, ... attrn ) 表示将 n 个属性投影到关系之外。
σ( relation, condition) 表示选择符合条件的行。
⊗(relation1,attr1,relation2,attr2) 表示在命名属性上连接两个关系。
relation1 – relation2 是两个关系之间的差异。
relation1 ÷ relation2 将一个关系除以另一个关系。

我见过的示例使用三个表。我想知道当只涉及两个表(学术和联系人)而不是三个(学术、联系人、拥有)时的逻辑。

我正在使用这个结构:

LessNumVac = Π( σ( job, vacancies < 2 ), type )
AllTypes = Π( job, type )
AllTypes – LessNumVac

我如何构造代数:

列出学术“约翰”拥有的所有联系人的姓名

【问题讨论】:

  • 有很多 RA(关系代数)。它们在运算符甚至关系是什么方面都不同。提供操作员定义和您的参考。例如教科书名称、版本和页码。

标签: relational-algebra


【解决方案1】:

列出学术“约翰”拥有的所有联系人的姓名。

为此,您将加入 AcademicConctact 关系,过滤 John,并投影名称属性。为提高效率,请在加入前选择 John:

πforename,surename (联系方式⋈academicNO = AcademicIDacademicIDforename = "John" 学术))))

【讨论】:

    【解决方案2】:

    您必须使用natural join ⋈Left outer join ⟕ 和/或Right outer join ⟖ 扩展您的操作集才能显示连接。

    有一篇关于Relational Algebra 的很棒的维基百科文章。您绝对应该阅读那篇文章!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-15
      • 2018-09-27
      • 2011-03-30
      • 2018-03-16
      • 2018-10-03
      • 2019-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多