这个问题,从本质上来讲。想讨论是数据模型设计里面的规范化和反规范化的问题。
从规范化的角度来讲,数据仓库的设计者是希望越规范越好,因为这样会减少数据的冗余,而且也便于模型的扩展。从反规范化的角度来讲,数据仓库的使用者是希望使用越方便越好,他们并不太关系规范不规范冗余不冗余,只要用着方便就好。
这种情况在工作中是十分常见的,那么该怎样来解决它?下面有两个思路:
1. 两种方式都存。虽然,这样看起来会占用更多的存储空间,但不失为一种合适的解决方案,因为宽表是通过别的表拼接而成的,因此宽表的存储周期是可以短一些。
2. 只存多个维度表,通过视图来创建宽表。
这种方式适合于宽表的查询次数较少的情况。
比如在Hive中,宽表其实只是为了计算出来之后导入Es等系统中供其它系统查询,那么久没必要存储一份宽表,直接通过视图来封装就可以。 另外,数据仓库的设计,往往不能是以计算出几张表就结束了,我们更应该提供的是数据服务,让使用方都通过服务的方式来访问我们的数据,而不是简单地将表暴露出去。
当我们以数据服务的方式提供数据的时候,不管是易用性还是安全性都更容易得到满足。