代码之家  ›  专栏  ›  技术社区  ›  mattalxndr

对购物车进行编码:当用户结账时,我是否应该将每一项产品数据复制到“订单产品”表中以保存其状态?

  •  1
  • mattalxndr  · 技术社区  · 16 年前

    我是否应该将整个产品以及所有相关数据克隆到另一个表中以备日后使用,有效地记录产品的当前状态,就像用户购买产品时一样?

    赞成的意见:

    • 产品(如用户在购买时看到的)是为子孙后代保留的,从未改变过。如果产品数据随时间变化,则不会更改原始订单信息。

    欺骗:

    • 增加了很多复杂性:
      • 数据库中还需要几个表。
      • 要跟踪的类似架构。
    • 使用了更多磁盘空间。

    有人能巧妙地解决这个难题吗?

    2 回复  |  直到 16 年前
        1
  •  2
  •   Walter Mitty    16 年前

    我建议克隆与订单相关的产品属性。例如,单价。产品的大多数属性都不是订单的一部分。 哪些属性与订单相关,取决于企业如何开展业务。

    如果只是一些属性,您可以将它们直接克隆到订单详细信息记录(行)中,而不是创建另一个表来保存这些数据。增加的复杂性是最小的。

    这是我对事务处理的建议。另一方面,如果您正在构建一个用于长期分析的数据仓库,那么在产品维度表上保留一个版本是正确的方法。

    那么,您将永远不会对产品维度进行更新。相反,当产品属性更改时,您将在产品维度中插入新行以保存新值。新行的产品密钥相同,但版本号不同。

        2
  •  0
  •   sje397    16 年前

    我建议在产品数据中添加“版本号”,并保留旧版本。这样,您就可以维护产品数据,不添加更多的表,并且可以选择剔除旧产品。 和 如果空间太大,请稍后订购。