事实表和维表中多对多关系 ----桥接表


桥接表(Bridge Table)是维度建模中的一类比较特殊的表。

在数据仓库的建模时,会遇到具有层次结构的维度表,对于这样的表有一种建模方式是建立父子表,即每条记录上包括一个指向其父记录的字段。这种父子表的建立在层级深度可变时尤其有用,是一个紧凑而有效的建模方式。但是这种建模方式也有缺点,就是用标准SQL很难对递归结构进行操作。有时事实表必须在最低粒度上支持带有多个值的维。如果无法改变事实表的粒度来直接支持该维,那么该多值维就必须通过一个桥接表连接到事实表。当遇到事实行的多值关系时,ETL系统既可以将每个观察值集合作为一个单独的分组,也可以在出现了相同的观察值集合时重用分组。遗憾的是,无法简单地确定出哪一种选择才是正确的。当多值维具有类型2属性时,桥接表必须是时变的。桥接表构造包含了一个加权因子,用于支持从桥接表进行加权报表生成。很多情况下,加权因子都是一种熟悉的分配因子,但是在另一些情况下,很难给出恰当的权重因子,因为指定加权因子并没有合理的基础。

与这种递归结构的父子表不同,桥接表采用不同的建模方式也可以表示这种层级结构。桥接表是建立在维度表和事实表中间的一个具有较多冗余信息的表,其中的记录包含层级结构中节点到其下面每个节点的路径。


表结构如下所示:

父关键字

子关键字

父层数

层名

底端标识

顶端标识                                                     

在桥接表中,节点与其下面的任意一个节点都建立一个关联记录保存在表中,即父子关系不再局限在相邻层,如第一层与第三层同样有父子关系,通过父层数可以区分相隔了几层。这样,可以通过父层数和父子关系来进行层级结构的查询。

场景:销售组织结构维表和销售记录事实。由于组织是有层级的,带来问题就是一条销售记录对应多个不同层的组织层级。

解决方式:ETL要先把组织层级打平到最细粒度,使事实表只只与最细粒度相关。

未解决场景:一本书的多个作者,每个作者是单独的维表。

如何解决?

把事实表拆分,标注第一第二作者。


当然,桥接表也不是一个完备的解决方案,它只能是在某些情况下是查询变得容易。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值