我正在设计一个电子商务应用程序的模式,其中我将有3个表,即订单,产品,客户。
所以我们是否应该直接将customer_id和product_id存储在Orders表中。
这样做的限制是,当产品或客户更新其属性(即产品价格或客户名称)时,orders表不会反映它们。
对于Ex:客户以10美元的价格购买了产品,但后来产品价格更新为20美元。因此,现在当我们通过产品id引用此订单时,我们将获得结果,因为它是以20美元而不是10美元的价格购买的。
解决方案1:
一种解决方案是每当发生更新时向products表中插入一个新行,并对该产品执行软删除,以便可以从orders表中引用它。
解决方案2:
将大部分详细信息存储在产品中,并将客户详细信息存储在订单表中。
解决方案3:
每当对客户和产品表进行更新时,创建这些表的临时表。
我非常愿意接受任何其他的建议。
发布于 2013-06-19 23:03:48
除了最简单的解决方案之外,您似乎还缺少一个orderLineItem表,其中只有一个产品/订单。
现在,也就是说,您可以通过几种方式来创建products表。
假设价格是products表中您想要更改的惟一变量,那么您可以有一个单独的pricePoints表,该表将存储任何商品在任何给定时间的价格。然后,您将在orders表中使用该表中的ID,并使用它从products表中访问productID。一种更低效的存储方法(但检索速度更快)是在orders表中同时存储productId和pricePointId。
您也可以通过简单地将价格支付金额存储在orders表中来完成此操作。这使您可以更灵活地添加折扣和定价规则。但是,如果您这样做,您确实需要关注审计价格。为什么在这个时候对这条线路收取这个价格将是一个常见的问题。
您需要知道客户在任何时候为产品支付了多少钱。如果客户今天购买了订单,那么知道他们会为订单支付多少钱并不那么重要。
客户是一个略有不同的问题。customer表中的某些信息是暂时的。其中一些必须为订单进行修复。假设客户有姓名、地址、帐单地址和送货地址。在订购时,发货地址和账单地址必须是绝对固定的。您不会想在三周后返回并发现送货地址已更改。但是,出于同样的原因,例如,如果客户更改了他们的婚前姓名,您可能希望更新名称。
现在,话虽如此,我们不会为您设计模式。对于如何设计一个简单的电子商务数据库,有很多很好的资源。
https://stackoverflow.com/questions/17194408
复制相似问题