Mysql - 处理供应商/场地对表的最有效方法

时间:2012-02-29 15:14:18

标签: php mysql

让我们说我有两张桌子。表1列出了具有唯一ID(auto_increment)的供应商。表2列出了这些供应商可能销售的场地或市场,也有唯一的ID。我希望能够快速访问供应商是否在某个特定市场。将有大量的供应商和场地。许多应用程序需要访问此信息并针对不同目的对其进行操作。我正在考虑两种方法。

方法1:

创建一个新表,其中包含与供应商相对应的行和列到地点的列。供应商场地栏中的“1”表示供应商位于该场所。这意味着在添加供应商时,我还在第三个表中创建了一个新列。我可能有很多供应商。

方法2:

在供应商表格中创建一个名为场所的列,在场地表中创建一个名为供应商的列。使用分隔的供应商或场地ID列表填充列。这似乎可能更难访问,但不需要具有可能令人难以置信的列数的新表。

实现每个的代码很简单,所以不会在这里发布。我的问题更多的是“最佳实践”或效率问题。谢谢。

4 个答案:

答案 0 :(得分:4)

这是多对多关系,因此您应该使用交叉引用表。该表有两列 - vendor_id和venue_id,两列都有一个主键。

答案 1 :(得分:2)

都不是。

有第三个表,有两列,两个外键:供应商和场地。

这是standard approach并且效率很高(至少如果您正确设置了索引)。不要担心有大量的小行。 (然后必须提取数据,拆分数据,然后进行新查询,效率更高。)

答案 2 :(得分:1)

方法3:

创建一个包含两列的中间(也称为联结)表:vendor_idvenue_id以及主键(vendor_id, venue_id)。第一列是FOREIGN KEYvendor (vendor_id),第二列是另一个FK到venue (venue_id)

如果您想要存储其他数据,也可以添加更多列,例如供应商开始销售特定场所,联系人(该场所的供应商等)

答案 3 :(得分:1)

如果供应商可以出现在多个地点,该怎么办?如果您想查看过去/未来某个特定地点的供应商,该怎么办?

使用第三个表(场所ID,供应商ID,其他列)来分解N:M关系。不要试图在一个列中存储多个场所或多个供应商。尽量不要使用布尔值 - 通常它们没有意义 - 因为你的问题是关于mysql至少使用枚举类型。