1

嘗試實現一個ER模型,我有實體:教師,學生,論文和關係:發佈,建議。老師和學生都可以發表論文,但只有老師可以給論文提供建議。我是否應該爲學生和老師重複發佈關係,還是讓它看起來像是一種與老師和學生之間沒有關係的三方關係?與兩個實體沒有任何關係的三個實體設計關係

+0

如果我嘗試實現這樣的數據庫,Papers表中是否包含來自教師和學生的兩個外鍵? – Menderft

+0

您需要更好地定義您的規則。一篇論文可以只由一位教師,還是可能由多位教師提供建議?教師是否建議學生或只有論文?教師發表的論文是否也會得到老師的建議?論文是否有多個出版商(在現實生活中,學術論文往往會有很多名字)。 – Brian

+0

@Brian是的,我應該更好地定義我的規則。一篇論文可以由許多學生和許多教師同時出版,並且有很多顧問。 – Menderft

回答

1

這聽起來像你可以模擬它想:

student(student_id, name, etc) 
teacher(teacher_id, name, etc) 
paper(paper_id, title, text, etc) 
contributor(contributor_id, paper_id, contribution_type, contributor_type) 

貢獻在哪裏類型是枚舉(發行人,顧問),同樣貢獻類型是枚舉(教師,學生)......或布爾is_publisher, is_adviser。

缺點是,這不允許外鍵從學生/老師的貢獻者,並且你沒有從顧問到教師的嚴格限制。表格顧問(teacher_id,paper_id)允許對顧問進行約束,但仍然不允許在學生ID上使用約束或外鍵。

另一個選擇可能是將它分解爲:

teacher_contribution(teacher_id, paper_id, is_adviser) 
student_contribution(student_id, paper_id) 

,這將允許完全數據庫限制於預期的模式,但可能會比較困難在某些情況下查詢。

任何都可以接受。它在某種程度上取決於您的特定應用程序以及您打算如何查詢數據。

+0

我更喜歡大多數任務的第二種方法,因爲它使DRI更容易(即使在角色鑑別器列(如「is_advisor」)上執行某些邏輯)。視圖通常可以處理「我希望我使用單個鏈接表,這樣這個查詢更容易」的情況。 – user2864740

+0

我傾向於進一步和每個人打電話,然後有一個PERSON_PAPER協會與角色枚舉.. – Randy

+0

@Randy我傾向於有人在「其他」一側鏈接 - 例如學生和老師仍然都是人。雖然這個建議在這裏看起來不錯 - 如果一個人不再是學生呢?他們*還*撰寫了論文。 (我主要處理「快照」數據集。) – user2864740