2012-11-28 114 views
0

我想創建一個關係數據庫,其中有兩個表用戶和產品。每個表格的每個項目都可以與第二個表格的許多項目相關。兩個表之間的多對多關係

我的當前實現如下:

兩個主表 -

->Users 
User ID 
UserInfo 

->Products 
Product ID 
ProductInfo 

兩種不同lookuptables

->UserToProduct 
UserID 
ProductID 

->ProductToUSer 
ProductID 
UserID 

每次加入從用戶到的產品的關係,我只需在第一個查詢表中添加一行,反之亦然。

這是正確的做法嗎?有沒有我可以參考的這種場景的標準模型?

+1

也許你只需要一張表用戶 - 產品與關係方向的額外行? – sbyd

+0

@Gowtham既然你認爲你需要有兩張表,你能描述一下你的用例嗎?我知道你只需要一張表進行連接,但是我認爲**你需要/想跟蹤與關係相關的其他元數據。我只是不知道附加元數據是什麼。 –

+0

@BrianDriscoll簡單用例 - 我想要搜索產品用戶A的具體情況。我使用第一張桌子。第二種情況,我想查看有多少用戶購買了產品A,因此我搜索了第二個表。 – Gowtham

回答

3

你不需要兩個查找表,你需要的只是users_products。至於資源,有無數的,只是谷歌「數據庫多對多」

UPDATE

考慮一下這個數據:

products 
------------ 
id  info 
------------ 
1  car 
2  flute 
3  football 

users 
------------ 
id  info 
------------ 
10  bob 
20  tim 
30  manning 

現在,作爲一個簡單的例子,假設人手擁有足球和汽車。比方說tim擁有長笛和足球。現在,這裏是你的查找表:

users_products 
---------------------- 
user_id product_id 
---------------------- 
    20   2 
    20   3 
    30   3 
    30   1 

就是這樣。現在,你可以像「給我所有的有車用戶」或「給我所有的汽車用戶具有」等

乾杯查詢

+0

這就是我的想法,但我認爲他想要2個人的關係? –

+0

@Madbreaks你能澄清一下嗎?如果我只有一個查詢表,我怎麼知道哪種類型的項目與哪個其他類型的項目有關? – Gowtham

+0

@ChristianVarga我想要兩個表之間的雙向多對多關係。 – Gowtham

1

你真的不需要或不想要兩個不同的查找表。你應該只有一個(你的表,UserToProduct或ProductToUser都可以)。查找表的主鍵應該是由ProductID和UserID組成的組合鍵。

+0

就像我說的。 :D – Madbreaks

+0

在我發佈我的帖子後看到了你的答案...顯然你是更快的打字員:) –

+0

什麼是一個複合鍵? @sbyd使用額外的列來表示關係的方向聽起來很棒。 – Gowtham

相關問題