【问题标题】:Schema Best Practice: Is it ever OK to store duplicates of a record?Schema 最佳实践:存储重复记录是否可行?
【发布时间】:2016-03-09 22:25:41
【问题描述】:

这是一个关于良好架构设计的一般问题。就我而言,我使用的是 Rails 4 和 PostgreSQL。

假设我有一个storefront,有很多products。店里还有很多orders,每个都有很多products。

周一,客户支付了order 的费用。所以现在,我们有一个属于storefrontorderproduct

周二,商店决定更改products 之一的价格。

显然,我不想更改客户周一购买商品的记录,因此这让我相信我应该存储 两份 product - 一份商店现在(即星期二)正在销售,这是客户在星期一购买的商品的另一份副本

但是,我知道通常要避免重复这样的数据。

是否有处理此类情况的最佳实践?

【问题讨论】:

  • 无论如何,您可能不得不复制记录。您必须保留“旧”产品的历史记录,例如旧价格,旧版本,所以您的销售记录可以正常查看。要么在店面表中维护历史记录,要么将所有内容复制到销售表中。否则,您将查找客户 X 在日期 Z 购买的产品 Y,并获得 Y 的“现在”规格,而不是“当时”。

标签: ruby-on-rails postgresql schema


【解决方案1】:

这听起来像是重复,因为您为它们使用了相同的名称。一种价格是客户支付的价格。另一个是产品当前的销售价格。它们是独立的数据片段,尽管在很多情况下它们具有相同的值。我只需给它们单独的名称(例如Order#paid v.Product#price),并在销售时将Product#price 存储在Order#paid 中。这样可以根据需要更改产品价格,而不会影响订单。

【讨论】:

  • 是的。重复 = 具有相同含义的相同值。
猜你喜欢
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多