Mysql数据库设计中的多对多关系

标签 mysql database database-design

我正在设计一个数据库,该数据库将产品和销售这些产品的商店联系起来。

许多商店将出售彼此相同的产品。 同样,很明显,每个商店都会有多种类型的产品。

我试图对制作表格的最佳方式进行一些研究,但我在网上阅读的所有资源在技术上都非常枯燥且逻辑上形式化,以至于无法直观地理解他们在说什么。

我一直听到人们说您应该使用联结表,但我不明白这对我的情况有何适用。

我想做的是为“商店”类别创建一行,然后有单独的行“product_1”、“product_2”、“product_x”等。我会在其中列出商店销售的每种产品,但我我不确定这是否合适。

此外,一些商店可能有 50 种产品,这意味着我需要 50 行。我不确定是否有办法解决这个问题。

最后,我的问题是,按照标准惯例,这种关系的理想数据库结构是什么?

最佳答案

我会有三张 table 。一个用于商店 [name, id & info]。一个用于项目 [name, id & info]。一个链接两个 [关系 ID、商店 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

因此,要查找 store1 有哪些商品,您将获得 storeID 1,然后搜索关系表以查找哪些行的商店 ID = 1,这将返回第一行和第二行,这告诉您 store1 有商品1 和 2。类似地,要查找哪些商店包含 item2,您将获得 item2 的 ID,即 2,在关系表中搜索 itemID = 2,这将返回第 2 行和第 5 行,这告诉您商店 1 和 3 有 item2 .

关于Mysql数据库设计中的多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13103461/

相关文章:

mysql - 在 mySql 中并排合并来自两个表的数据

MongoDB 文件太大

database - 无法在 postgresql 上创建 RLS

mysql - 复杂字典的数据库设计

sql - 如何知道何时使用索引以及使用哪种类型?

python - 数据库设计中表的对应对象

php - mysqli_* 或 mysql_* 性能?

php - 使用搜索结果(如%search%)来匹配数据库中另一个表中的ID

mysql - SQL,根据C列中的值(标志)计算两列A,B的SUM,性能

java - JComboBox:如何解决 JComboBox 和 ItemListener 中的异常