2012-10-27 141 views
1

我正在設計一個數據庫,它涉及產品和攜帶它們的商店。Mysql數據庫設計中的多對多關係

許多商店將攜帶相同的產品。很顯然,每家商店會有很多類型的產品。

我試圖做一些研究,使表但我在網上看了這麼技術上疲憊和邏輯形式化,它從能力帶走直觀地瞭解他們是怎麼說的資源的最佳途徑。

我不斷聽到人們說你應該使用交界表,但我不明白這是如何適用於我的情況。

我想要做的是創建一個「商店」類別的行,然後有單獨的行「product_1」,「product_2」「product_x」等我在哪裏列出商店銷售的每個產品,但我我不確定這是不錯的形式。

此外,一些商店可能有50個產品,這意味着我需要50行。我不確定是否有辦法解決這個問題。

最終,我的問題是,通過標準的約定,這種關係的理想數據庫結構是什麼?

回答

4

我會有三張桌子。一個用於商店[名稱,編號爲&信息]。一個用於項目[名稱,編號爲&信息]。一個鏈接兩個[關係ID,商店ID &項目ID]。

這將使您能夠更改商店和商品數據,而無需更新您的關係表。

因此,如果您想要在商店中的商品,您可以在關係表中搜索與商店編號相匹配的商品。反之亦然,如果你想要有商品的商店,你可以在關係表中搜索商品ID並返回商品ID。

生活必需品,例如:

STORE: 
********************* 
storeID storeName 
********************* 
1   store1 
2   store2 
3   store3 

ITEMS: 
********************* 
itemID itemName 
********************* 
1   item1 
2   item2 
3   item3 

RELATIONS: 
********************* 
storeID itemID 
********************* 
1   1 
1   2 
2   1 
2   3 
3   2 
3   3 

因此找到商店1有,你會得到STOREID爲1哪些項目,以及搜索的關係表中查找該行有一個商店ID = 1,這將返回第一行和第二行,告訴你store1有第一項和第二項。類似地,找到哪些商店cary item2,你會得到item2的ID,即2,在關係表中搜索itemID = 2,這會返回行2和五,告訴你商店1和3有item2。

+0

+1當我格式化一個架構,你已經說過所有OP需要知道:) –

+0

感謝您的優雅解決方案。那麼鏈表就會在每一行有重複的條目,對吧?因此它可能沒有主鍵,或者它有一個雙排主鍵,是正確的? – user1299028

+0

是的。或者你可以添加一個id到關係中。擁有一個id總是一個好主意,因爲你永遠不知道你的數據庫如何隨着你的需求變化而改變。這對於「未來打樣」有好處。我更新了我的答案。 –

相關問題