数据仓库中的层次结构与事务建模
1. 层次结构建模
1.1 折叠层次元素
首先,需要将层次元素折叠到单个实体表中。这一步很有必要,能让树的外键引用单个表。具体操作如下:
1. 为产品和层次表分配代理键。
2. 创建一系列唯一的父子关系行来构建树。这可以根据收到的数据馈送和可用的ETL工具来选择不同的方式实现。
- 如果从3NF扁平层次开始(如产品层次),为每个层次实体生成一行作为子行。例如,对于产品组表中的每一行,使用产品组键作为子键,产品组行上的品牌外键作为父键创建一行。
- 接着,使用根实体“部门”创建根节点行。为每个部门创建一行,使用部门键作为子键,父键设为null(表示没有父节点,即根节点)。不过,使用null可能会因数据库系统不同而产生副作用,也可以将外键值设为0或 -1 来表示空引用。
- 由于传入的3NF数据使用业务键或自然键,所以要对折叠后的实体表进行查找,以获取合适的代理键。
1.2 折叠表的注意事项
当层次元素折叠到单个表时,要包含一个类型标识列来区分每个实体。该代码应是该表自然键的一部分,确保每个实体类型之间的唯一性。折叠表本身应有一个代理主键,以避免树的外键和该表之间进行复合连接。
1.3 扁平化递归树
递归树在数据仓库中是最有用的层次结构,不过非递归结构更适合数据集市。之前提到过生成一个包含递归树展开的桥接表,以消除查询中的递归需求。桥接结构紧凑,但检索与实体相关的属性时需要额外的连接。
当层次结构元素只有描述属性时,将层次结构以扁平化的1NF或2NF结构交付给数据集市可能更有利。这种扁平化方式是将层次级别水平分布
超级会员免费看
订阅专栏 解锁全文
5546

被折叠的 条评论
为什么被折叠?



