【问题标题】:MySQL product extra'sMySQL产品额外的
【发布时间】:2015-04-18 20:43:25
【问题描述】:

我正在使用 MySQL 数据库构建一个 Web 应用程序。用户可以订购产品,但是对于这些产品,可以将许多额外的功能添加到用户想要的产品中。示例:user1 => order: product1 + extra 1,2,3。 User2 => order: product1 + extra 1. User3 => order: product1 + no extras。

我目前正在努力在 MySQL 中正确获取它......

有任何说明或提示可以正确完成此操作吗?

【问题讨论】:

  • 附加内容与产品有什么关系?产品可以有额外的吗?
  • 有些产品可以有额外的,有些则不能,对于那些可以有6种可能的额外
  • 会不会总是只有 6 个临时演员,并且会一直存在“有或没有”的关系吗?
  • 用户有 6 个可能的附加项,但他只能选择 1 个或 2 个或 3 个或全部 6 个或根本没有...

标签: mysql database database-schema


【解决方案1】:

为了使其成为未来的证明并遵循 Boyce–Codd 范式 (BCNF),我将像您所做的那样将 extras 放置在自己的表中,然后使用多对多表将 productID 链接到 extraID。这样,如果将来您想要更多的附加功能,或者某些产品可以有不同的附加功能,就不会有问题。

然后您还可以创建另一个多对多表,将 orderdetailID 与 extraID 连接起来,以了解每个产品添加了什么。

【讨论】:

    【解决方案2】:

    您可以尝试在所有表之间加入:

    SELECT *
    FROM Order o LEFT JOIN Orderdetail od
    ON o.orderID = od.oderID
    LEFT JOIN products p
    ON od.productID = p.productID
    LEFT JOIN extra e
    ON e.extraID = p.productsExtra
    

    注意您的字段 productsExtra 是 smallint,大小为 10,而 extraID 是 smallInt 5。您应该重新考虑它们是否共享主键/外键关系。

    【讨论】:

      猜你喜欢
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 2018-03-12
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多