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

时间:2015-01-22 10:53:37

标签: php mysql database-design

我正在设置一个SQL数据库模型,该数据库跟踪具有一定数量的多个产品的订单。

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

我想创建一个以orderID作为键值的行,然后是一个Order选项卡,其产品ID和数量都是这样的" ProductID-Quantity"这样它就可以放在一个牢房里。棘手的部分是在这一行中采用多种不同的产品。可以将所有产品的数量插入一个单元格中,如下所示:

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

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

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

1 个答案:

答案 0 :(得分:3)

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

为此,您可以创建一个表orders(其中可以存储其他信息,例如它所属的用户标识),并且还有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