【问题标题】:How to create a database model with multiple products in one order如何在一个订单中创建包含多个产品的数据库模型
【发布时间】:2015-01-22 10:53:36
【问题描述】:

我正在建立一个 SQL 数据库模型,用于跟踪具有一定数量的多个产品的订单。

表必须有一个特定于该顺序的键值,并且不能在表中的其他任何地方重复。

我正在考虑创建一个具有 orderID 作为键值的行,然后创建一个具有 productID 和数量的 Order 选项卡,例如“ProductID-Quantity”,以便可以将其放置在一个单元格中。棘手的部分是在这一行中采用多种不同的产品。可以将所有产品及其数量插入一个单元格中,如下所示:

"1100-3, 1500-1, 1600-8"

所以这是一个单元格,其中三个产品订购了 3 次、1 次和 8 次。在 PHP 中读取它,用逗号和破折号分隔它们。

有什么方法可以更有效地做到这一点?

【问题讨论】:

  • 将每个数据放在一个单独的字段中,而不是将它们组合起来。订单号,产品号。因此,如果有一个订单包含 3 次相同的产品,您将有 3 条记录(数量)
  • 但是我不再有唯一的键值,然后你得到 1 行 productID 1 和一个产品,另一行 productID 1 和另一个产品,所以你只是分开问题。
  • 您的唯一键是 orderid。它可以是一个增量值。
  • 是的,但是一个客户对同一个订单有多个订单 ID,我必须能够打印出一个订单一个唯一的订单 ID(包括在所述订单中订购的每个产品)
  • fields = Customerid, orderid, productid,quantity data(first item)= 10,100,1234,2 data(second item) = 10,100,4567,3

标签: php mysql database-design


【解决方案1】:

您所描述的听起来像是“多对多”的关系。一份订单可以容纳多件商品,但一件商品也可以是多行的一部分。

为此,您可以创建一个表 orders(其中可能存储其他信息,例如它所属的用户 ID)并拥有您的 products 表。

现在你可以通过类似这样的方式连接它们

CREATE TABLE order_products (
    orderid INT NOT NULL,
    productid INT NOT NULL,
    quantity INT NOT NULL,
    PRIMARY KEY (orderid, productid),
    FOREIGN KEY (orderid) REFERENCES orders (id),
    FOREIGN KEY (productid) REFERENCES products (id)
);

要选择获取所有产品行,只需使用JOIN

【讨论】:

  • 所以你有一个 orderID 和 productID 组合的主键?
  • @WoutKooijman 是的,这样每个订单只能有一个产品的条目(数量可变)
猜你喜欢
  • 2021-06-28
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多