将由多个产品组成的订单插入SQL数据库的最佳做法是什么


What is the best practice to insert an order consisting of multiple products into a SQL database?

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

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

非常感谢!

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

  • 产品
  • 订单

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

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聚合根所拥有的子对象,而不仅仅是一个链接表。这些子对象链接到其父对象(订单),每个子对象还链接到一个产品。