2013-03-11 154 views
0

假设我有以下关系关系代数:一个一对多的关系

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. 

我如何构造代数..

名单谁是学术‘约翰’所拥有的所有联系人的姓名。

+0

你有没有忘了告诉我们关系'工作'? – Bergi 2013-03-11 21:48:36

+0

没有必要,我只是显示结构。将结果分配给变量LessNumVac等。人们倾向于提出复杂的解决方案,所以这只是为了展示我希望提供帮助的结构。 – MooHa 2013-03-11 21:50:29

+0

那么你的问题是什么?顺便说一句,你的*关系代数*的描述是不完美的,看看[标签信息](http://stackoverflow.com/tags/relational-algebra/info) – Bergi 2013-03-12 11:41:59

回答

0

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

为此,您将加入AcademicConctact关系,筛选John,并输出名称属性。为了提高效率,在加入之前选择约翰:

π用的名字,surename(联系⋈ academicNO = academicID(π academicID(σ用名字= “约翰”学术))))

+0

赞赏,也感谢标签信息链接 – MooHa 2013-03-12 22:38:49

0

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

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