新手问题 有关产品表,订单表的传统设计问题

bjtugun · 2015年11月21日 · 最后由 tooyee 回复于 2018年03月24日 · 3934 次阅读

产品表有很多字段,产品全称是由多个字段的值 format 出来的,没有字段存储产品全称。

订单表下包含多条订单明细,每条订单明细里记录了产品 id 和购买数量。

class Order
 has_many :order_items
end

class OrderItem
 #product_id
 #count
end

OrderItem 和 Product 之间并没有 has 和 belong to 的概念。那么问题来了,我在 view 里显示订单明细的时候,怎么显示产品全称呢?我传订单 json 数据给 app 的时候,app 怎么显示订单明细中的产品全称。

我就是想问问要把这个问题解决的漂亮一点应该怎么做。

order_items 里要把商品名称存下来。

基本上 orderitem 的意义就是为了存储商品变动的字段(价格,折扣,税),如果你把经常查询的字段也放入也是合理的

OrderItem 应该有一些字段保存「交易时商品的一些属性」

  • count
  • price
  • total_price
  • product_title

因为价格会变、产品标题也在变,你希望用户查看订单时看到的是当时的快照,而不是现在的商品信息。

第一个案例

2015-11-21 你们搞促销,商品的价格是 25 元,过了两天促销结束,商品恢复到 35 元。如果按照你的设计,用户会过两天看到订单中商品的单价是 35 元,他就会叫:「为什么我买贵了?」

其实他当时的购买价格是 25 元。

这就会让你很麻烦。

第二个案例

按照你现在的设计,如果你的商品修改了标题「西瓜特惠,买一送一」。很多老的订单项也会出现这个商品的 title。

一些用户就会叫:我买的西瓜为什么没有买一送一。

快照还是很有必要的。

#1 楼 @huobazi #2 楼 @fate #3 楼 @xiaoronglv 多谢楼上几位,我明白了

一个是档案,一个是交易档案管理

需要 登录 后方可回复, 如果你还没有账号请 注册新账号