关系代数为一对多关系

时间:2013-03-11 21:44:01

标签: sql relation algebra relational-algebra

假设我有以下关系:

Academic(academicID(PK), forename, surname, room)

Contact (contactID(PK), forename, surname, phone, academicNO(FK))

这不是作业,我只是想了解符号的使用,如果你可以帮助我以下。

Π( relation, attr1, ... attrn )表示从关系中投射n个属性。

σ( relation, condition)表示选择符合条件的行。

⊗(relation1,attr1,relation2,attr2)表示在命名属性上加入两个关系。

relation1 – relation2是两种关系之间的区别。

relation1 ÷ relation2是一种关系与另一种关系的划分。

我见过的例子使用了三个表。我正在使用Java,只想知道只有两个表(学术和联系)而不是三个(学术,联系,拥有)的逻辑。

到目前为止,我正在使用这种结构        “

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

我如何构建代数...

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

2 个答案:

答案 0 :(得分:0)

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

关于Relational Algebra的维基百科文章很棒。你一定要读那个!

答案 1 :(得分:0)

  

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

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

π forename,surename (联系方式⋈ academicNO = academicID (π academicID (σ forename =“John”学术))))