【问题标题】:E-Commerce Database Design for Orders Table订单表电子商务数据库设计
【发布时间】:2013-06-19 14:49:42
【问题描述】:

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

那么我们是否应该直接将 customer_id 和 product_id 存储在 Orders 表中。

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

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

解决方案 1:

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

解决方案 2:

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

解决方案 3:

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

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

【问题讨论】:

    标签: mysql e-commerce database-schema


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

    • @Brian.your 解决方案更接近解决方案 3,因此与其创建单独的价格点表,不如将价格直接存储在订单表中。客户可以更改订单的送货地址# 1 它是不同的地址,而对于订单#2,他可能想在不同的地址发货,因为他想给某人送礼。最后我不希望有人为我设计一个模式,但我希望有人分享他们在设计这些方面的经验.因为我已经在网上搜索并找到了一些文章。这是一篇很有希望的文章。princeton.edu/~rcurtis/ultradev/ecommdatabase.html
    • 那个链接中的那个数据库看起来是一个很好的开始。我确实建议将支付的价格放在订单表中。添加与产品不同的价格点表的复杂性的好处是,价格点规则引擎不仅将其用于基于日期的定价。因此,假设您也有数量和 VIP 定价。价格点表也可以让您为这些价格创建价格。
    • 感谢您的建议,布赖恩...我仍然会深入研究该数据库设计并相应地前进
    猜你喜欢
    • 1970-01-01
    • 2018-09-03
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 2014-07-29
    • 2014-01-31
    相关资源
    最近更新 更多