【问题标题】:Need some help with database table design with shopping cart需要一些关于购物车数据库表设计的帮助
【发布时间】:2011-03-03 04:01:39
【问题描述】:

假设我有桌子

Products  -------product_id , name , price , size

shopping_cart------cart_id,item_id,user_id,quantity

order----order_id , user_id ,totalprice , date

orderHistory---------user_id , item_id,date,order_id

我很困惑我应该如何存储购物历史,因为如果我存储 item_id ,那么可能会删除某些产品,那么我应该在历史中显示什么。

该产品的价格,尺寸,其他维度可能会随着时间而变化,但在历史上我不想改变

那么我应该如何设计数据库

【问题讨论】:

    标签: mysql database data-modeling shopping-cart


    【解决方案1】:

    对于产品删除问题,请尝试在产品表中包含类似“活动”(布尔)字段的内容。这样您就不需要物理删除产品,只需停用它们。然后,您可以构建代码,使非活动产品不会显示在目录中,但它们仍然可以在您的数据库中显示在订单历史记录部分中。

    我猜您正在尝试使用您的 OrderHistory 表创建类似于“OrderLine”表的东西。您只需要将其链接到产品和订单标题(订单)表,您不需要将其链接到用户,因为订单标题表已经链接到用户。如果您在 OrderLine 表中添加一些额外的字段,例如“数量”和“价格”,那么您可以在下订单时创建快照,并将价格(在订购时)和订购数量插入到您的订单历史记录中桌子。这样,如果产品价格随时间发生变化,OrderLine 表中的信息保持不变,您仍然拥有原始价格。

    如果您想保留它以显示价格趋势,您仍然可以构建一些实体来保存产品历史记录(价格等),但就维护您的实际订单信息而言,这不是必需的。

    这种方法意味着您的购物车表可以用作“正在进行的工作”存储库,您只存储当前的购物车,一旦订单完成,购物车就会被清空,并且数据会插入到您的订单标题和订单行表中.

    这并没有涵盖所有内容,但希望能给您一些关于您可以针对您的问题采取的方法的想法。

    【讨论】:

      【解决方案2】:

      我现在面临同样的问题,我基本上是通过将相关数据复制到辅助表中来解决它,以便订单历史模型可以查看。它们永远不会改变,也永远不会被删除。

      这样,如果价格发生变化或标题发生变化,您将获得订单时间的快照。

      另一种方法是创建版本化产品,并存储特定的版本 ID。当产品发生变化时,显示的版本会更新为最新的产品 ID。

      无论哪种方式,你都是重复历史。

      【讨论】:

        【解决方案3】:

        在我看来,您应该在订单和产品之间有一个表格,您可以在其中存储订单和产品的信息。您可以为此目的使用订单历史记录表。只需将购物时间信息存储在该表中即可。在我看来,这应该是一个很好的做法。

        即使产品表中的实际值发生变化,您也不需要更改订单历史表中的值。仅在用户进行某种购物时才触摸该表,否则您不需要这样做。

        我还建议您创建一个客户表并将客户信息存储在该表中,并在 orderhistory 表中也使用客户 ID。它甚至可以帮助您对历史进行分类

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-24
          • 2018-10-27
          • 2011-08-12
          • 2010-11-11
          • 1970-01-01
          • 2011-07-23
          • 1970-01-01
          相关资源
          最近更新 更多