2013-03-11 121 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有一篇很棒的維基百科文章。你一定要閱讀那個!