1

I am designing a schema for E-Commerce app, in which I would have 3 tables i.e Orders, Products, Customers.

So Should we store customer_id and product_id in Orders table straightaway.

The limitation to this is when a product or customer updates their attributes( i.e product price or customer name ), the orders table doesn't reflect them.

For Ex: A Customer bought a product at $10, but later on the product price gets updated to $20.So now when we are referring to this order by product id we would get the result as it was bought at $20 instead of $10.

SOLUTION 1:

One solution would be to insert a new row into products table whenever an updates occur and perform a soft delete to that product so that it can be referenced from orders table.

SOLUTION 2:

Store most of the details in product and customer details in orders table.

SOLUTION 3:

Create a temporary table of customers and products whenever there is an update to these tables.

I am very much open to any other suggestions.

4

1 回答 1

2

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

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

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

您也可以通过简单地将支付的价格金额存储在订单表中来做到这一点。这使您可以更灵活地添加折扣和定价规则。如果你这样做,你确实需要担心审计价格。为什么此时要为这条线路收取这个价格将是一个普遍的问题。

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

客户是一个稍微不同的问题。客户表中的一些信息是暂时的。其中一些必须为订单修复。假设客户有姓名、地​​址、帐单地址和送货地址。在下订单时,送货地址和帐单地址必须是绝对固定的。您不想在三周后返回并发现收货地址已更改。但是,出于同样的原因,例如,如果客户更改了他们的婚前姓氏,您可能希望更新名称。

现在,说了这么多,我们不会为您设计架构。对于如何设计一个简单的电子商务数据库,有很多很好的资源。

于 2013-06-19T15:03:47.997 回答