拥有临时表或在购买购物车的临时状态表中记录是否更好?

时间:2012-07-25 14:54:46

标签: mysql database

我正在尝试创建购物车购买数据模型。用户可以购买各种东西,例如信用卡和产品(每个都有一组单独的属性)。在成功完成交易后,每个商品购买将存储在表格中(分别表示信用和购买)。

我想知道的是,当用户处于交易中时,我应遵循哪种方法(列出的方法有利有弊)

存储用户为临时表中的项目选择的属性(类似于temp_credit_purchases和temp_product_purchases),然后将记录插入实际表格中(信用和购买)

赞成

  • 所有不成功的交易都可以删除,实际表中不会有很多丢失的自动递增ID

缺点

  • 2个插入和1个选择 - 插入比更新更重(在第二种情况下会发生)

将数据插入具有临时状态的实际表中

赞成

  • 更优化(仅1次插入和1次更新)

缺点

  • 表中会有很多不必要的行,有时会用于查询其他面向用户的模块(可能会使查询变慢)。

虽然我能够列出每种方法的优缺点,但我无法做出明确的决定。请帮我思考一下这个?

1 个答案:

答案 0 :(得分:1)

我会将数据存储在实际表中,链接到具有临时状态的订单。如果订单和关联的购买超过X小时并且订单未完成,则可以定期清除订单和链接购买。

在索引表中有额外的行不会使查询显着变慢,并且您无论如何都要定期清理它们。当然,除非订单未完成,否则您需要保留这些行并为其提供指标,例如'人们最常改变主意的产品。

请记住:

  • 自动递增的ID中的差距不是您应该的 担心因为它们的设计只是为了确保你的行 唯一的,实际上不是数据。
  • 一般情况下,当您可以在某处添加字段时,您不希望通过将类似事物的表格分成两部分来表示实体的质量(订单是否已完成)。