mysql - 在使用购物车设计数据库表方面需要一些帮助

标签 mysql database data-modeling shopping-cart

假设我有 table

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

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

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

最佳答案

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

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

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

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

这并没有涵盖所有内容,但希望能为您提供一些想法,让您可以采取一些方法来解决您的问题。

关于mysql - 在使用购物车设计数据库表方面需要一些帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5176504/

相关文章:

mysql - 为每个团队选择前 x 条记录

mysql - Group_Concat 中的元素数

c# - SQL服务器 :How to speed up Select and Insert query in loops of statements using c#

mysql - 为什么这两个查询会出现死锁?

mysql - 在 MySQL 中存储多对多关系的最佳方式?

python - 有没有办法在 O(1) 时间内使用其中一个键获取值

mysql - 处理 mysql "ERROR 1062 (23000)"

MYSQL 舍入问题

mysql - 您将如何创建服装尺码数据库结构?

mysql - mysql 或 postgres 中两列的唯一组合