我正在建立一个SQL数据库模型,该模型跟踪具有一定数量的多个产品的订单。
表必须具有特定于该顺序的键值,并且永远不会在表中的任何其他位置重复。
我正在考虑制作一行,该行将订单 ID 作为键值,然后创建一个具有产品 ID 和数量的"订单"选项卡,例如"产品 ID-数量",以便可以将其放置在一个单元格中。棘手的部分是在这一行中采用多种不同的产品。可以像这样将所有产品及其数量插入一个单元格中:
"1100-3, 1500-1, 1600-8"
所以这是一个细胞,订购了 3 次、1 次和 8 次三种产品。在PHP中读入它,用逗号和破折号分隔它们。
有没有办法更有效地做到这一点?
你描述的听起来像是"多对多"的关系。一个订单可以容纳许多产品,但一个产品也可以是许多行的一部分。
为此,您可以创建一个表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
.