在数据仓库的数据模型设计过程中,经常会遇到这样的需求:
1.1 数据量比较大;
1.2 表中的部分字段会被更新,比如订单余额;
1.3 需要查看某一个时间点或者时间段的历史快照信息,比如查看某一个订单在某个时间点的订单余额
1.4 变化的比例和频率不是很大,比如,总共有1000万的会员,每天新增和发生变化的有10万左右;
如果表每天都保留一份全量,那么每次全量中会保存很多不变的信息,对存储是极大的浪费.如果保存所有数据的一份最新数据,又不能解决历史数据的查询问题.
综上所述: 引入"拉链表",既能满足反应数据的历史状态,又可以最大程度的节省存储;
创建订单历史信息表,每天保存全量的数据,如下所示:
--订单历史信息表
drop table t_order_history;
create table t_order_history(
day_id varchar2(10) ,
order_id varchar2(10),
balance int,
create_time varchar2(10),
modify_time varchar2(10)
);
comment on table t_order_history is '订单历史信息表';
comment on column t_order_history.day_id is '日期ID';
comment on column t_order_history.order_id is '订单ID';
comment on column t_order_history.balance is '订单余额';
comment on column t_order_history.create_time is '创建时间';
comment on column t_order_history.modify_time is '修改时间';
--插入数据
insert into t_order_his