2012-02-29 53 views
1

可以說我有兩個表。表1列出了具有唯一ID(auto_increment)的供應商。表2列出了這些供應商可能出售的場所或市場,也有唯一的ID。我希望能夠快速訪問供應商是否處於某個特定市場。將有大量的供應商和場地。許多應用程序需要訪問這些信息並對其進行處理以達到各種目的。我正在考慮兩種方法。Mysql - 最有效的方式來處理供應商/場地對的表

方法1:

請與相應的供應商和列行場館的新表。供應商場地欄中的'1'表示供應商在該場所。這意味着添加供應商時,我也在第三個表中創建了一個新列。我可能有很多供應商。

方法2:

創建一個名爲在供應商表場地柱和被叫在場地表廠商柱。使用供應商或場所ID的分隔列表填充列。這似乎可能更難以訪問,但不需要一個列數可能非常大的新表。

實現每一個的代碼是微不足道的,所以不會在這裏發佈。我的問題更多的是「最佳實踐」或效率問題。謝謝。

+0

我認爲這裏有一個普遍的共識,所以我會繼續選擇一個正確的答案。謝謝大家的參與。 – buck54321 2012-02-29 16:29:53

回答

4

這是一個多對多的關係,所以您應該使用交叉引用表。此表將包含兩列 - vendor_id和venue_id,並在兩列之間使用主鍵。

2

都沒有。

第三張表中有兩列,都是外鍵:供應商和場地。

這是standard approach,並且效率很高(至少如果你有正確設置的索引)。不要擔心有大量的小行。 (要提取數據,分割數據,然後創建新的查詢,效率會更高。

+1

方法1不是交叉引用表,它看起來像:vendor_id,venue1(布爾),場地2(布爾),場地3(布爾)等 – 2012-02-29 15:18:22

+0

@RyanP - Ooops,所以它是,我誤讀了問題。(編輯) – Quentin 2012-02-29 15:20:10

+1

是的,我幾乎做了同樣的事情。 ;) – 2012-02-29 15:21:17

1

方法3:

使兩列中間(也稱爲結)表:vendor_idvenue_id和主鍵的(vendor_id, venue_id)。第一列是FOREIGN KEYvendor (vendor_id),第二列是另一個FK到venue (venue_id)。如果你想存儲更多的數據,如當供應商開始銷售specifoc地點,聯繫人(即供應商對於場地等)

1

如果什麼廠商會出現

而且添加更多的列在多個場地?如果你想查看過去/未來某個特定地點的供應商,該怎麼辦?

使用第三個表(場所ID,供應商ID,其他列)來分解N:M關係。不要嘗試在單個列中存儲多個場所或多個供應商。儘量不要使用布爾值 - 通常他們沒有意義 - 因爲你的問題是有關mysql至少使用枚舉類型。

相關問題