Chinaunix首页 | 论坛 | 博客
  • 博客访问: 166686
  • 博文数量: 103
  • 博客积分: 2251
  • 博客等级: 大尉
  • 技术积分: 1095
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-03 11:15
文章分类

全部博文(103)

文章存档

2011年(103)

分类: 数据库开发技术

2011-05-13 09:31:39

缓慢变化维 Slowly Changing Dimensions A typical slowly changing dimension is a product dimension in which the detailed description of a given product is casionally adjusted. ): 数据仓库数据加载规则,数据仓库中用于实现历史数据与当前数据的同时记录。

概述

缓慢变化维Slowly Changing Dimensions(A typical slowly changing dimension is a product dimension in which the detailed description of a given product is casionally adjusted.):数据仓库数据加载规则,数据仓库中用于实现历史数据与当前数据的同时记录。与OLTP系统不同的是,数据仓库中可以保留下数据的变 化信息,及历史数据的记录。

由于系统的设计不同, OLTP系 统可以方便的得到实时的报表,却难于得到混合的、复杂的、包含历史的统计信息。数据仓库系统却由于有其专有的建模方式,可以方便的做到这些。在数据仓库 中,一个典型的事实表设计,其包含多个代理主键,周围由多个星形围绕着它的维表构成,这些维表则是一些具有简单主键的表。对于维表数据的历史存储的需要, 一种典型的数据加载规则即是 Slowly Changing Dimensions方式。即当维表数据发生改变,数据仓库需要感知,并真实的记录下数据的每一步细微变化。

但 是通过代理键的方式进行维度的加载,一方面导致维度表设计过于复杂,另一方面事实表数据中的相应的键值也需要进行相应的代理键替换,从而导致了设计的复杂 性、数据库性能的下降和维护的成本的提高,因此这些维度通常是根据用户需求和业务敏感度极高的基础表信息,例如某些企业内的工号,因为工号分配的限制,员 工流失后,新进入的员工仍使用原来的员工号,对于 OLTP系统只需要一个简单的 UPDATE即可;而对于数据仓库系统则要区分同一个工号前后不同的人员信息,以避免查询时对同一个工号发生的歧义。

替代键方式 概图

对于一般性的维度,仍建议使用最简单的方式进行维度处理,即覆盖法,对于维度只做更新和插入处理,不做删除,即只保留最后一次更新的状态,不保留历史状态,对于大多数维度信息已经足够。

简单维度更新 概图

原理

缓慢变化维的实现原理,采用的是数据仓库的 3种常用数据加载规则中的全表比对方式。在 ETL过程中,抽取所有源数据,并进行相应规则转换,完成后先不插入目标,而对每条数据进行目标表比对。根据主键值进行插入与更新的判定,目标表已存在该主键值的,表示该记录已有,并进行其余字段比对,如有不同,则进行 Update操作,如目标表没有存在该主键值,表示该记录还没有,即进行 Insert操作。通过全表比对,感知数据的变化,并进行相应的处理。

数据仓库的数据加载规则可以有多种方式实现,缓慢变化维是其中一种非常强大的方式。而根据它的具体设计不同又可分为 3种:覆盖、全历史记录、记录最新纪录及上一次历史。在以下的介绍中将把数据仓库的数据加载规则融入进去,并结合 SQLServer脚本的缓慢变化维的实现详细说明。

阅读(676) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~