雪花型,支架型,和桥型 的区别

作者:Margy Ross – 2008/9/3

译者:Daniel Zhen

初学者经常混淆雪花型(snowflakes),支架型(outriggers),和桥型(bridges)的概念。在这个设计技巧文档中,我将尝试着消除对上述与标准的维度模型相关概念的误解。

当维度表是雪花型的时候,冗余的多对一(many-to-one)属性被从独立的维度表中移除。和被压缩的层次结构不同,属性被存储在单独的表中。举例来说,品牌和类别原先都是产品维度表中的列,现在把品牌和类别转换成单独的表并与产品表连接。应用雪花型,维度表被标准化为第三范式。在标准化的单层维度模型中,只拥有10-20个非标准的维度;而把它转换为雪花型后,会出现100个甚至更多维度表。

 

我们通常建议你在处理多对一层级关系时,使用单一维度表而不是雪花型。雪花型更可能出自经验丰富的OLTP数据架构师的手笔,但它对于DW/BI查询性能并不是最优的。从用户对表结构的直接访问的角度来看,雪花型的表增加了复杂性并且容易混淆;甚至当用户使用的是临时表,为了优化雪花模型必须连接上百张表来处理查询,这同样增加了复杂性。雪花型也会增加ETL系统的负载,当连接的层次关系发生变化时,管理标准表的连接键将变得非常复杂。雪花型可以用代码取代重复的文本字符串,从而节省空间。但是对空间的节省往往无足轻重,特别是考虑到对ETL的负载和查询复杂度时。

支架型类似于雪花型,他们都是用来处理多对一的关系的,然而也有更多的限制。支架型是指维度表之间的连接,它并不是完全标准的雪花型,而是从事实表中托生的一个以上的层次。支架型通常在一个标准维度被另一个维度引用的情况下应用,比如雇员维度表中的雇佣日期属性。如果用户想通过非标准化的日期属性对雇佣日期进行切片,比如财年,那么日期维度表(包含诸如“财年雇佣日期”列)就充当了支架的角色,通过日期键和雇员维度连接。

就像现实中的很多事情一样,支架型可以被维度建模所接受,但它们往往被看作是异常而不是规则。如果你的维度模型中充斥着支架,就该回到设计阶段,分析支架对易用性和查询性能的潜在影响。

桥表通常在两种复杂的场景下使用。其一是当多对多关系不能只由事实表本身所解决的时候,因为单事实度量值无法与维表中的多值对应,比如多客户与单银行帐户关联时,事实表中的客户维度键无法有效分配给多个客户。因此需要使用包含双键的桥表,来匹配客户和帐户的多对多关系,并用来连接事实表。

桥表也用来表示深度参差不齐或可变的层次关系,这种层次关系不能够有效转型为简单的固定层次的具有多对一属性的维表。在这样地环境下,桥表通常用来补缺,虽然代价高昂。有些时候,桥表用来捕获完全的数据关系,甚至做出一些假设,比如在包含主账户持有者或维度属性中的顶级层次,来避免每次通过桥导航进行查询的损耗。

posted on 2011-07-29 08:55  coldbutterfly  阅读(1319)  评论(0编辑  收藏  举报

导航