如何在一个订单中创建包含多个产品的数据库模型

Wou*_*man 1 php mysql database-design

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

该表必须有一个特定于该订单的键值,并且永远不会在表中的其他任何地方重复。

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

"1100-3, 1500-1, 1600-8"
Run Code Online (Sandbox Code Playgroud)

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

有没有办法更有效地做到这一点?

ker*_*ero 6

您所描述的听起来像是“多对多”关系。一个订单可以包含多个产品,但一个产品也可以是多行的一部分。

为此,您可以创建一个表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)
);
Run Code Online (Sandbox Code Playgroud)

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