代码改变世界

常见数据库设计(3)——历史数据问题之多记录变更

2012-08-28 22:13  Mike.Jiang  阅读(8989)  评论(1编辑  收藏  举报

关于历史数据的单记录变更:常见数据库设计(2)——历史数据问题之单记录变更

1.概述

在保存客户操作历史数据时,有一种数据,如标书的标书流水+标书清单、细化方案的细化方案流水+细化方案清单、商品价格的价格变动流水+变动清单等等。这样的历史数据,它们都有一个控制流水版本的主流水表,还有一个与某个版本对应的清单表。

 

2. 多记录变更、无储存未来历史记录的需求,储存于单表中

业务:在做付款计划时,需要保存计划的历史版本数据,同时也要记录每一计划针对哪些物资进行付款的。

表结构

说明:如单记录一样,版本的控制在付款计划表中。主体如何实现版本控制请参见单记录变更

3. 多记录变更、无储存未来历史记录的需求,储存于多表中

业务:业务如2中的业务一样,不过当每一次的付款清单都是很多时,并且每一个的付款计划有很多版本时,此时的付款计划清单的数据量就会很大。在正常访问时,我们只需要的是当前可用的清单是什么,不会关注历史的版本,而当清单表中的数据量达到一定量时,会严重影响查询效率。

结构:

付款计划、付款计划清单表与上面的一样,此时再加入一个付款计划清单变更表

4,多记录变更、有储存未来历史记录的需求

业务:在管理供应商时,会有一个商品价格变动的需求,并且是多个商品价格一起变动,并且可以提前通知在下一个月价格将产生变动。此时就需要有一个流水表来控制多个商品一起变动价格,并且这个流水要支持储存未来历史数据的功能。

表结构:

说明:即在清单表中,加入生效日期。在这里,变动流水为SupplierGoodsPriceVar表,变动清单为SupplierGoodsPriceVarDetails表,可用的清单为SupplierGoods,体现存储未来历史数据的地方在变动清单中加入价格生效日期的字段。