KDT#29 对维度表和事实表进行修改
尽管在做数据仓库设计时,我们会考虑的很周全,但是对于建立一个数据仓库来说,一定会遇到增加新的数据类型、增加数据关联关系甚至需要增加新的数据源等问题。在这些情况发生时,理想的设计是可以在不影响数据仓库上的应用程序的基础上完成上述功能。
当然,在实际工作中,肯定会有些变动我们无法在不影响应用程序的情况下改进设计。这里要说的是维度模型在支持设计的修改方面是很强的,下面列出了一些可以支持修改的情况。
1.增加新的维度属性
当客户或产品等维度有新的描述属性时,我们可以直接在维度表中增加新的属性列。对于查询工具来说,通过元数据可以知道维度表中增加的新的描述属性,如果用户需要的话,可以直接添加到报表中,不需要的话,也不会对原有应用产生影响。
2.增加新的度量事实
当事实表中需要增加新的度量事实时,最简单的情况就是需要增加的事实和已有事实表在同一个粒度上。这时,我们只需要在相同粒度的事实表中将增加该事实的字段即可。
如果需要增加的度量事实和已有的事实表都不在一个粒度上,那么最好的选择就是增加一张事实表。将不同粒度的事实放到同一张事实表中是个错误的选择。
3.增加新的维度
当需要增加新的维度时,我们需要增加相应的维度表,并将该维度表的代理键存入相应的事实表中,这时,我们没有修改事实表的粒度,只是增加了一个外键。
4.维度的粒度变得更细
有时,我们需要增加某个维度的粒度,即维度对应的粒度要变细。这时,在我们增加更细粒度的维度表的同时,只能放弃掉原来的事实表,建立粒度更细的事实表来满足需求。同时,我们可以在新建立的事实表上建立聚集事实表代替原来的事实表,建立在数据仓库之上的应用程序不需修改,还可使用聚集事实表来运行。
5.给两个关联维度添加增加层级关系
有时,我们会遇到两个维度表出现的多对一的层级关系。通常来说,将具有层级关系的维度表进行合并是一个很好的选择,但是其中的某个维度是独立的一致性维度的话,我们还不能将它们合并。这时,我们可以保留原来独立的维度,建立新的层级关系的合并维度,并将该维度的主键引入相应的事实表中,对原有的应用不会产生影响。
6.增加新的数据源
通常,新的数据源都会有它自己的粒度和维度。这时,我们可以建立新的维度表和事实表,不动原有的事实表,则不会影响到原有应用。