将包含多个产品的订单插入SQL数据库的最佳做法是什么?

时间:2015-02-13 14:44:01

标签: php mysql

在我的网站上,用户可以在购物车中放置多个产品并下订单。如果订单总是由(例如)两个产品组成,我将创建两个属性:product1product2,两者都带有products表的外键。问题是,订购产品的数量可能是1到(理论上)无限。

将此(可能)无限量的有序产品插入数据库的最佳方法是什么,同时仍将外键保持为products(因此每个订购的产品都链接到products表)?

非常感谢!

1 个答案:

答案 0 :(得分:3)

这被称为"多对多"关系。你基本上有两个核心实体:

  • 产品
  • 顺序

任何产品都可以存在于多个订单中,任何订单都可以包含多个产品。因此,它们之间需要有一个链接表来维持这种关系。像这样简单:

Product
--------
ID
Name
etc.

Order
--------
ID
CustomerID
etc.

OrderProduct
--------
OrderID
ProductID
Quantity
etc.

第三个表包含产品的任何给定组合与订单之间的关系。仅限于关系且不属于订单本身或产品本身的信息(例如该订单的产品数量)将存在于该表中。

您甚至可以在域中将其提升为自己的实体,如下所示:

Product
--------
ID
Name
etc.

Order
--------
ID
CustomerID
etc.

OrderLineItem
--------
OrderID
ProductID
Quantity
etc.

所有改变的都是名称,但在定义业务域的语义时,命名非常重要。现在,您可以直观地将每个OrderLineItem视为Order的聚合根所拥有的子对象,而不仅仅是一个链接表。这些子对象链接到其父对象(Order),每个对象也链接到Product。