一、背景介绍
前期工程师/产品经理没有考虑到产品结构变化。把产品的库存、价格设置属性放置到一张表里面,即成为横向表(这为后期产品结构拓展带来很大的不方便)。所以,因旅游电商产品需求变更,需将产品横向表重构为纵向表。
二、SKU属性设计方式
- 维护一个销售属性表(SKU表)
a. 每个SKU属性表独立维护SKU属性和选项。
b. SKU属性的命名一般和分类相关。
c. 扩展点:SKU属性集合和商品分类关联,这样避免在添加商品时列出太多的SKU属性集。 - 商品sku表
基于sku维护商品的库存、价格
3.当我们添加一个商品的时候,在不考虑页面展现的情况下需要这几步:
a.插入商品基本信息到商品表
b.插入商品属性到属性表
c.插入销售属性到销售属性表
d.插入销售属性ID组合,数量,价格等到商品SKU表。
三、开始重构
1. 按需求提取可能会变的基本属性字段
2. 提取销售属性字段
3. 根据销售属性字段创建sku
四、订单表设计
1、商品基础属性及库存(SKU)
2、订单以及订单详情(Order & OrderItems),OrderItems 里面的记录价格必要的冗余信息,同时关联
上快照id(即 以下方案a 和方案b结合)。
订单内商品数据应该怎么保存?
方案a
在订单创建的时候直接把商品数据保存在订单里面,作为订单的一个附属字段
这样子后续修改商品,不会对已经在订单内的商品任何影响
问题:如果商品修改不频繁的情况下,会大量增加订单数据的大小,同一个商品下10单,10个单里面都
有商品数据(特别是需求显示商品的字段较多时,比如规格,产地,单位等等等等)
方案b
在订单创建的时候,对商品生成一个快照存在一个商品快照表中(同一个商品可含多个快照,订单创建
时判断商品快照是否为最新,最新则不新生成快照),订单内存储商品快照ID,显示订单商品时,用ID
去取商品快照显示
这样子后续修改商品,不会对已经在订单内的商品任何影响,
问题:比如订单只保存最近一年,一年以前订单自动归档,那商品快照表就需要单独处理判断商品的快
照是否该归档,如果商品快照不定期归档,数据量会无限变大
方案c
创建订单直接保存商品ID,显示商品的时候在去商品表里查询商品
这样子最节省空间
参考文档:http://www.cnblogs.com/mmmjiang13/archive/2011/04/21/1983079.html