2012-12-10 117 views
0

我有一個問題。基本上我模擬了一個充滿作者信息的發佈者數據庫。所以爲此,我有一個名爲'作者'的實體 - 作者有一個自動增量計數器的主鍵,以及'姓名'和出生年份。ER模型中的關係混淆

除此之外,我還有一個'book'實體,它有一個名稱,發佈年份,它是自己識別的主鍵,它是一個自動遞增計數器。它還有兩個外鍵 - 一個引用主要作者的字段(這是必需的),以及一個指定第二作者的可選字段。

我的問題是,作者和書之間的關係顯然是'一個'到'零或多個'。然而,我陷入困境的是第二作者的「選擇性」。我認爲它應該是一個'零或一'到'零或多'的關係,但我不確定我是否正確翻譯邏輯 - 我的想法是有可能很多書不會有第二作者。

同樣,當在sqlite3中實現這個功能時,最好是使該字段爲'required'還是'optional'?我假設我是否要求它可以保持休眠狀態作爲'NULL'值,除非需要。

任何幫助,您可以提供將不勝感激。

回答

0

您正在尋找的關係是多對多的關係。

  • 書有1名或多個作者
  • 一個人寫(作者)1個或更多的書

這意味着你將需要3個數據庫表:

書,人們作者

  • Books:id,title
  • 作者:book_id,person_id,position(例如: 1第一作者,2第二作者)
  • 人:ID,名稱

一旦你有這三個表你使用連接可以查詢的關係。在這個youtube video中可以找到初學者的入門介紹,你想要的JOIN類型在4:50標記周圍出現。

一個計算器的答案和例子可以在這裏找到:sqlite LEFT OUTER JOIN multiple tables

+0

謝謝!如果我改變了我的關係,那麼,如果我沒有「第二作者」 - 我有一個自己是作者的「編輯者」(但也是可選的)。這是否對應於'零或一個'到'零或多個'關係? – user1798522

+0

這取決於。我想一本書可以有多個編輯器。因此,你會得到一個稱爲編輯器的額外表格。或者,您可以將作者表更改爲books_people表並添加一個「角色」字段。 – Wilco