2012-09-11 35 views
1

我想設計一些可以讓用戶將列表放在一起的商品,比如雜貨商品。如果每個用戶可以有多個列表(即不是一個設定的數量),這些列表都有可變數量的項目(同樣,沒有設置),而有些項目出現在幾個不同的列表,我如何創建一個數據庫沒有可怕的多餘?數據庫設計爲未知數量的列表和每個列表上的項目數量可變?

我對這類問題完全陌生,以前沒有把任何複雜的數據庫放在一起,也不知道從哪裏開始。這是我想出了作爲一個例子,但我懷疑這是做事的正確方法:

enter image description here

任何幫助或想法,將不勝感激!

+3

你提出的解決方案是好的。這裏沒有'可怕的冗餘'。 – Randy

+0

哦,好的。很高興聽你這樣說。在這種情況下,出於好奇開放替代品:-)。 – Chris

回答

0

看起來你需要一些與此類似:

enter image description here

列表是私人用戶,但一個項目可以在多個列表中共享:

  • USER和LIST之間的關係是通過簡單的外鍵建模的一對多關係。
  • LIST和ITEM之間的關係是多對多的,它們通過它們之間的聯結(又名鏈接)表進行建模:LIST_ITEM。

我已經使用識別USER和列表之間關係的圖中的上方,在「下游」的表,其產生更「自然」的鍵:

  • 減少需要連接(你已經知道哪些USER給定的LIST_ITEM屬於,不需要加入LIST)。
  • 但使下游密鑰「更胖」。

設計中使用非識別用戶和LIST(生產「苗條」鍵)之間的關係是這樣的:

enter image description here

+0

謝謝您還添加了一個插圖,使其更清晰!我相信你的LIST_ITEM表與我在問題本身發佈的LINK_TABLE的作用相同。 – Chris

+0

@Chris True,但我相信LIST_ITEM是一個更好的名稱 - 如果你有更多需要連接的表,那麼他們不能將它們的鏈接表命名爲「LINK_TABLE」。另外,我沒有在LIST_ITEM中使用代理PK,因爲在這種特殊情況下它是不必要的。 –

0

您可以創建join table LIST_LINK_ITEM表之間有三個

她的主鍵是:三個組成主鍵

相關問題