需要一些帮助与购物车的数据库表设计

时间:2011-03-03 04:01:39

标签: mysql database data-modeling shopping-cart

假设我有桌子

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,那么可能会删除某些产品,然后我应该在历史记录中显示什么。

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

那我应该如何设计数据库

3 个答案:

答案 0 :(得分:1)

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

我猜你正试图用OrderHistory表创建类似“OrderLine”表的东西。您只需将此链接到产品和订单表(订单)表,您无需将其链接到用户,因为订单表头表已链接到用户。如果您向OrderLine表添加一些其他字段,例如“数量”和“价格”,那么您可以在下订单时创建快照,并插入价格(订购时)和订购历史中订购的数量表。这样,如果产品价格随时间变化,OrderLine表中的信息将保持不变,您仍然具有原始价格。

如果您想保留产品历史记录(价格等),您仍然可以建立一些实体以显示价格趋势,但在保持实际订单信息方面则不是必需的。

这种方法意味着您的购物车表可以用作“正在进行中”的存储库,您只存储当前购物车,订单完成后,购物车将被清空,数据会插入您的订单表和订单行表中

这并不涵盖所有内容,但希望能为您提供有关您可以采取的问题的一些方法。

答案 1 :(得分:0)

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

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

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

无论如何,你都是重复历史。

答案 2 :(得分:0)

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

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

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

也是如此