订单表的电子商务数据库设计

时间:2013-06-19 14:49:42

标签: mysql e-commerce database-schema

我正在为电子商务应用程序设计架构,其中我将有3个表,即订单,产品,客户。

所以我们应该直接在订单表中存储customer_id和product_id。

对此的限制是当产品或客户更新其属性(即产品价格或客户名称)时,订单表不会反映它们。

对于Ex:客户以10美元的价格购买了产品,但后来产品价格更新为20美元。因此,当我们按产品ID提及此订单时,我们会得到结果,因为它是以20美元而不是20美元购买的。 $ 10

解决方案1:

一种解决方案是在发生更新时向产品表中插入新行,并对该产品执行软删除,以便可以从订单表中引用它。

解决方案2:

将大部分细节存储在订单表中的产品和客户详细信息中。

解决方案3:

只要对这些表进行更新,就会创建一个客户和产品的临时表。

我对其他任何建议都持开放态度。

1 个答案:

答案 0 :(得分:0)

您似乎缺少的一件事是orderLineItem表,除了最简单的解决方案之外,还有一个产品/订单。

现在,话虽如此,您可以通过多种方式进行产品表。

假设价格是您想要更改的产品表中唯一的变量,您可以使用单独的pricePoints表,该表将在任何给定时间存储任何项目的价格。然后,您将在orders表中使用此表中的ID,并使用它来从products表中获取productID。一种稍微低效的存储方式(但检索速度更快)是将productId和pricePointId存储在订单表中。

您也可以通过将价格支付金额存储在订单表中来完成此操作。这使您可以更灵活地添加折扣和定价规则。如果你这样做,你确实需要关注审计价格。为什么此时这条线的价格是一个常见的问题。

您需要知道客户随时为产品支付了多少费用。如果他们今天购买了该订单,那么知道该客户将为该订单支付多少费用并不是那么重要。

客户问题略有不同。客户表中的某些信息是暂时的。其中一些必须为订单修复。假设客户有姓名,地址,账单地址和送货地址。在订单发货时,必须绝对修复运费和帐单地址。您不希望在三周内返回并发现送货地址已更改。但是,出于同样的原因,您可能希望在客户更改其婚前姓名时更新名称。

现在,尽管如此,我们不打算为您设计架构。如何设计一个简单的电子商务数据库有很多很好的资源。