【问题标题】:Mysql database design in a many to many relationship多对多关系中的Mysql数据库设计
【发布时间】:2012-10-28 04:12:10
【问题描述】:

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

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

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

我一直听到人们说你应该使用联结表,但我不明白这将如何适用于我的情况。

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

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

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

【问题讨论】:

    标签: mysql database database-design


    【解决方案1】:

    我会有三张桌子。一个用于商店 [name, id & info]。一个用于项目 [名称、ID 和信息]。一个链接两个[relation id, store id & item 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,然后搜索关系表以查找哪些行的 store ID = 1,这将返回第一行和第二行,这告诉您 store1 有商品1 和 2。类似地,要查找哪些商店 cary item2,您将获得 item2 的 ID,即 2,在关系表中搜索 itemID = 2,这将返回第 2 行和第 5 行,这告诉您商店 1 和 3 有 item2 .

    【讨论】:

    • +1,而我正在格式化您已经说过所有 OP 都需要知道的架构:)
    • 感谢优雅的解决方案。那么链接表的每一行都会有重复的条目,对吧?因此它要么没有主键,要么有一个双行主键,对吗?
    • 是的。或者你可以在关系中添加一个 id。拥有一个 id 总是一个好主意,因为您永远不知道您的数据库将如何随着您的需求变化而变化。这对“未来的证明”很有好处。我更新了我的答案。
    猜你喜欢
    • 2012-09-30
    • 2011-05-01
    • 1970-01-01
    • 2011-04-13
    • 2011-05-03
    • 2012-06-16
    • 2011-08-23
    • 2010-11-07
    相关资源
    最近更新 更多