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


Mysql - Most efficient way to handle table of vendor/venue pairs

假设我有两个表。表1是具有唯一id(auto_increment)的供应商列表。表2列出了这些供应商可能销售的场所或市场,并带有唯一的id。我希望能够快速了解供应商是否在某个市场。将有大量的供应商和场地。许多应用程序将需要访问这些信息,并出于不同的目的对其进行操作。我正在考虑两种方法。

方法1:

制作一个新表,其中行对应于供应商,列对应于场地。对于供应商,场所栏中的"1"表示该供应商在该场所。这意味着在添加供应商时,我还在第三个表中创建一个新列。我可能有很多供应商。

方法2:

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

实现每一个的代码都很琐碎,所以这里不会发布。我的问题更多的是一个"最佳实践"或效率问题。非常感谢。

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

两者都没有。

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

这是一种标准的方法,而且非常有效(至少在索引设置正确的情况下)。不要担心有大量的小行。(这比提取数据、拆分数据然后进行新查询要高效得多)。

方法3:

制作一个包含两列的中间(也称为junction)表:vendor_idvenue_id,主键为(vendor_id, venue_id)。第一列将是FOREIGN KEYvendor (vendor_id),第二列将是另一个FK到venue (venue_id)

如果你想存储更多的数据,也可以添加更多的列,比如当供应商开始销售特定的场地时,(该场地的供应商的)联系人

如果一个供应商可以出现在多个地点怎么办?如果你想看看过去/将来某个特定地点有哪些供应商,该怎么办?

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