Database design 编码购物车:当用户结账时,我是否应该将每一条产品数据复制到一个";订购产品“;表以保存其状态?

Database design 编码购物车:当用户结账时,我是否应该将每一条产品数据复制到一个";订购产品“;表以保存其状态?,database-design,shopping-cart,Database Design,Shopping Cart,我是否应该将整个产品以及所有相关数据克隆到另一个表中供后代使用,有效地记录产品的当前状态,就像用户购买产品时一样 优点: 该产品(正如用户在购买时所看到的)是为子孙后代保留的,从未更改过。如果产品数据随时间变化,则不会更改原始订单信息 缺点: 增加了很多复杂性: 数据库中还需要几个表 要跟踪的类似模式 使用了更多的磁盘空间 有谁能聪明地解决这个难题吗 我建议在产品数据中添加“版本号”,并保留旧版本。这样,您就可以维护产品数据,不添加更多的表,并且如果占用了太多的空间,您可以选择以后剔

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

优点:

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

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

有谁能聪明地解决这个难题吗

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

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

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

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


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

我会包括价格,零件号,名称和单位。关于客户信息,您也应该这样做,您将订单发送到当时的地址,并且应该存储名称和地址。您也不希望该信息的更新更改订单的历史详细信息。感谢您的回复。我要这样做。此外,我还将在订单记录中存储一个JSON对象,其中包括所有相关数据,以防万一。感谢您的响应。这在理论上是伟大的,但我必须改变我的CMS太多,使它在现实中工作。