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

标签 mysql e-commerce database-schema

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

那么我们是否应该立即将 customer_id 和 Product_id 存储在 Orders 表中。

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

例如:客户以 10 美元购买了产品,但后来产品价格更新为 20 美元。因此,现在当我们通过产品 ID 引用此订单时,我们会得到以 20 美元购买的结果,而不是10 美元。

解决方案 1:

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

解决方案 2:

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

解决方案 3:

只要这些表有更新,就创建一个包含客户和产品的临时表。

我非常愿意接受任何其他建议。

最佳答案

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

话虽如此,您可以通过多种方式创建产品表。

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

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

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

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

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

关于mysql - 订单表的电子商务数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17194408/

相关文章:

sql - 如何获取 Oracle 中所有表的所有列的名称?

mysql - 使用 GROUP BY 计算 COUNT 的百分比

security - 这个 Paypal 设置安全吗?

c# - 在电子商务结账过程中显示特定于上下文的错误?

php - Paypal 和用户支付系统

mysql - 具有共享数据和动态表的 Multi-Tenancy 应用程序

types - SQL Alchemy - 使用 TypeDecorator 进行模式提取

php - 具有自动递增功能的用户可格式化 ID

用于在中间行中插入新行的 MySQL 语法?

mysql - 当两列具有相同的值时,INSERT WHERE NOT EXISTS 不起作用