0

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

我想知道的是,当用户进行交易时,我应该遵循哪种方法(列出利弊的方法)

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

优点

  • 所有不成功的事务都可以删除,实际表中不会有很多丢失的自增id

缺点

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

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

优点

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

缺点

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

尽管我能够列出每种方法的优缺点,但我无法做出明确的决定。请帮我考虑一下?

4

1 回答 1

1

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

在索引表中有额外的行不会使查询显着变慢,无论如何您都会定期清理它们。当然,除非订单未完成这一事实很重要,并且您希望保留这些行并提供有关它们的指标,例如“人们最常改变主意的产品”。

记住:

  • 自动递增 id 中的间隙不是您应该担心的,因为它们只是为了确保您的行是唯一的并且实际上不是数据。
  • 通常,当您可以在某处添加字段时,您不希望通过将包含相似事物的表一分为二来表示实体的质量(订单是否已完成)。
于 2012-07-25T15:02:25.340 回答