【发布时间】:2014-07-09 10:15:43
【问题描述】:
在我的 Rails 应用程序中,我需要存储客户订单,以便店主以后仍然可以参考订单。
我担心在订单完成后,店员可能需要在一段时间后更改价格或细节或产品。
假设产品仅通过product_id 链接到订单,这将损害最终订单的完整性。
常见的管理方法是什么?
我能想到的一个选项是,在幕后不允许更新产品。如果工作人员执行“更新”,则在幕后旧记录将被标记为“旧”,并在其位置创建新产品。
另一种选择可能是将哈希值存储在产品的订单模型中,因为它出现在交易发生的日期。
这样做有什么好处和坏处?是否有其他可能性我应该考虑作为设计认可的模式来处理这个问题?
【问题讨论】:
-
你不认为产品和订单之间的关系应该是多对多的,因为一个产品可以在多个订单中,而订单有多个产品。如果您采用多对多方法,那么您可以在加入表中保存每个产品的价格 w.r.t 订单
-
@Abk 谢谢。你说得很好……我在把问题放在一起时忽略了这个细节。我已经更新了评论问题,但我认为它不会改变我的要求,只是它确实打开了在链接表中保存数据的可能性。也就是说,我要确保保留的不仅仅是价格数据,它可能是任何东西。他们需要查看交易发生时产品的“外观”,无论此后发生了什么变化。
标签: ruby-on-rails database design-patterns model integrity