2017-01-02 62 views
-1

這是我第一次對我家圖書館進行數據庫設計。我有一個關於如何在每個表中實現主鍵的問題,我也很想知道是否可以接受許多與一個外部關聯的表,因爲我與「contributor_id」有很多關係。數據庫設計:主鍵和多對多協會

Link to image of design

我的表中不是所有的主鍵。如果一個主鍵不應該是外鍵(正如我已經理解的那樣),那麼什麼可以作爲copy_info和book_info表中的主鍵?我不確定我是否已經正確實施了可能存在多對多關係的中間表。這是一種情況,我應該要求複合主 關鍵?

也許有關於如何做到這一點的不同意見,但任何洞察力將不勝感激。如果我對此有所瞭解,請原諒我的問題不夠具體。

+0

[_關於最佳多對多table design_](http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table) –

+0

您需要閱讀大學/大學介紹數據庫設計。然後按照它的設計方法。然後在這種情況下提出一個具體問題。這裏最主要的錯誤是你需要刪除contributer_id並引入編輯(book_id,contributer_id),說明(...)等。但是理由是教科書的幾個章節。 – philipxy

回答

0

我被誤解如何實現一個多TO-很多關係,一旦我放入聯結表,我的表都有主鍵 Updated Design

0

我只是給幾個簡單的建議:

  • 我明白左邊的4個表是book_info和其他4桌與翻譯信息,作者信息等之間的中介表;我對嗎?因此,多對多關係(一本書可以有很多作者,一位作者有很多書),但是如果每次嘗試插入相同的貢獻者爲另一本書設置這樣的表,它將導致一個重複的關鍵錯誤!所以,從那裏刪除密鑰

  • 分配一鍵這些聚合表與被分配的關鍵在於兩個值(所以你永遠不會打破「唯一性」約束),以正確的方式,是完全無用的(和空間的浪費和Db資源)在這些簡單聚合表中分配密鑰

  • books and book_info是一對一的關係嗎?因此,將其分成兩個單獨的表格是有意義的,僅用於整潔目的(例如,如果您有很多字段,並且您想通過某些邏輯標準將它們分開)
    books and book_info是另一個多對多關係?在這種情況下,作爲關鍵字的「id」字段是正確的解決方案,但將表格和copy_info耦合在一起是不正確的(更好地將copy_info耦合到book_info,因此您可以將它分割爲兩個一對多關係(更容易在這種情況下,管理)

我希望我幫一點,反正你可以很容易地在球場上稍加練習,解決它。

+0

這是目前設置的方式,因爲重複性錯誤,我不能讓一個貢獻者連接到多本書。如果我理解正確,如果這4張桌子根本沒有鑰匙,我不必擔心唯一性。我不完全理解你的最後一點,是不是因爲book_info與copy_info有一對多的關係(我可以擁有一本書的多個副本),所以它不需要中間表的書籍?編輯:[像這樣?](http://imgur.com/a/loXSg) –

+0

更好!一對多從不需要中介表。你明白了我的觀點。關於copy_info,您計劃擁有一本書的多個副本,但您將如何區分它們?如果他們有相同的發佈者,相同的pub_date等等?他們可以有不同的條件,但在這種情況下,你的表太複雜了,沒有理由。 – Scare

+0

我已經添加了一個名爲copy_id的copy_info表的主鍵,我也將發佈者移動到了copy_info表。在某些情況下,我可能擁有同一本書的多個副本,但具有不同的發佈日期(版本)或不同語言,因此在book_info和copy_info之間建立一對多關係對我而言是有意義的。你的小竅門一直很亮,謝謝你。 –