原来的设计
最近被临时调入一个项目,任务是重写后台计算程序, 所以要保持现有的接口和数据库设计。
原有的数据库被设计成每个task一张表,表名为<prefix>_<taskid>
,简单说明一下:
- prefix 用于区别报表类型,每个task有10多种报表类型
- taskid 整数,用于标识task 每个task有一个开始日期和结束日期,在这个日期区间内,每天计算一次该task的报表。 每个table都有date列, 表明该行记录是哪一天的计算结果
新的设计
后台重构后,需要将修改数据库结构,表名为<prefix>_<date>
,表内有个taskid指明该条记录属于哪个task.
而为了不影响前端访问数据库展示报表,希望不要修改表结构。
解决方案
- 预先创建一组名为
<prefix>
的表,每天的<prefix>_<date>
继承自<prefix>
. - 为了不影响前端,每个task创建一个view:
create view <prefix><taskid> as select * from <prefix> where taskid=<taskid>
前端都没有察觉到后台数据库结构变了,后台程序有可以按照希望的方式建表。