首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL在实体上将多对多的多对多。

MySQL在实体上将多对多的多对多。
EN

Stack Overflow用户
提问于 2017-07-31 19:30:55
回答 2查看 531关注 0票数 3

我有一个项目,我有产品SKU的。每个产品都有一个或多个SKU的。

我还有商店,它可以有很多到多个产品,所以一个产品可以属于多个商店,一个商店可以有多个产品。

要完成,每个商店可以选择哪个SKU,他们想要的产品。所以我作为一个商店可以选择出售的T恤白色,这可能有(XS,S,M,L),我可以选择(XS,S)作为SKU的我想为我的商店。

目前

如你所见,一家商店与产品和SKU连接在一起。但我有一种感觉,那是出了点问题。

我的shop_skus和shop_products没有连接,所以一家商店的产品和sku的产品可能不匹配。

,我该怎么解决这个问题?

谢谢您抽时间见我!

EN

回答 2

Stack Overflow用户

发布于 2017-07-31 19:36:24

如果每个商店都有一组产品,而且每个商店-产品关系都有一组SKU,我认为您需要使用一个中间模型来处理这种关系。您可以创建一个名为CarriedProduct的模型,它与商店、产品和与SKU的一对多关系有关系。

通常,要向关系添加附加信息,即。Shop->Product,您将在relation表中使用透视列。但是由于有多个skus,枢轴列不会切割它。

票数 2
EN

Stack Overflow用户

发布于 2017-07-31 21:47:08

我的shop_skus和shop_products没有连接,所以一家商店的产品和sku的产品可能不匹配

据我所知,在商店和产品之间有两种间接关系:shops -> shop_skus -> skus -> productsshops -> shop_products -> products。一致性问题可以用复合外键来解决。

  • 添加列shop_skus.product_id
  • 定义复合外键:
    1. shop_skus(product_id, sku_id) -> skus(product_id, id)
    2. shop_skus(shop_id, product_id) -> shop_products(shop_id, product_id)

可以更改键中列的顺序。这取决于哪些索引可以更好地用于查询。

使用这些外键,您只能插入shop-skus,这两个表都可以重放:shop_productsskus

更新

如果我正确理解你的评论,你需要一个关系的商店SKU和产品段塞。

有一家商店在卖

代码语言:javascript
复制
product     | slug        | SKUs
------------|-------------|-----
white shirt | Batman      | M,L
white shirt | Wonderwomen | XS,S

在这种情况下,我要做以下几点:

  • 添加AUTO_INCREMENT主键shop_products.id
  • 添加列shop_skus.product_id
  • 添加列shop_skus.product_shops_id
  • 定义复合外键:
    1. shop_skus(product_id, sku_id) -> skus(product_id, id)
    2. shop_skus(product_id, product_shop_id) -> shop_products(product_id, id)

如果存在折叠外键,也可以/应该删除该外键:

  • shop_skus(sku_id) -> skus(id)

因为这是多余的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45423895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档