首页 > 解决方案 > 在一个订单中添加具有相同客户 ID 的多个产品

问题描述

有关于这个的堆栈溢出帖子,但我没有找到一个很好的解释,所以这就是我想要做的:

我有一个ordersproducts和一个clients表,我需要能够在 orders 表中添加多个产品。我发现我可以创建另一个像 order_products 这样的表来解决这个问题,但我只是不明白如何保存多个产品,为什么这应该解决我的问题?

我需要一个完整的解释,谢谢。

标签: mysqlsqldatabase

解决方案


如果您将在每一行中引用它们所属的订单,则可以将多个产品保存在 order_products 表中。考虑这个sql(理解这个概念非常基础):

--I use 'ordination' instead of 'order' because 'order' is
--reserverd word in SQL

CREATE TABLE client(
    id INT(3),
    name VARCHAR(20),
    PRIMARY KEY(id)
);



CREATE TABLE product(
    id INT(3),
    name VARCHAR(20),
    price NUMERIC(4,2), 
    PRIMARY KEY(id)
);


CREATE TABLE ordination(
    id INT(3),
    client_id INT(3),
    ordination_date TIMESTAMP,
    PRIMARY KEY(id),
    FOREIGN KEY(client_id)  REFERENCES client(id)
);

CREATE TABLE ordination_product(
product_id INT(3),
ordination_id INT(3),
quantity INT(3),
PRIMARY KEY(product_id,ordination_id),
FOREIGN KEY(product_id)  REFERENCES product(id),
FOREIGN KEY(ordination_id)  REFERENCES ordination(id)
);

创建戒律时,请遵循以下步骤:

  • 使用客户端 ID 在引用客户端的顺序中创建一行。
  • 在 ordination_product 中为客户订购的每个产品创建一行,并使用 ordination id 引用 ordination。

如果您需要检索特定排序中的产品,您可以使用 ordination_id 在 ordination_product 表中进行选择。


推荐阅读