转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> 其他 >> 正文
数据仓库之我见(设计篇)         ★★★★

数据仓库之我见(设计篇)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1565 更新时间:2009/4/22 23:21:14

建造数据仓库要做些什么?

一般说来,建造数据仓库主要两个方面:

1.     与操作性数据库的接口设计。

2.     数据仓库本身的设计。

看上去好像很简单,但事实并非就这么按部就班,假设我是一个数据库设计师,我完全可以不管三七二十一,先载入一部分数据,让DSS分析员(还没忘吧,就是那个给设计数据仓库的人要求的)分析去吧,等他先给点意见出来,我们在动手也不迟。

下面,我将按照提出问题、解决问题的顺序来上一堂学前班。

 

建造数据仓库的主要难点是什么?

首先纠正一个广泛存在的错误认识:建造数据仓库的过程就是从操作性数据中提取数据的过程,之所以说这是错的,主要是因为:操作性数据大都是非集成的(有谁见过一个计费程序可以把几年的账单条目统计一遍的),你不可能抽取出你真正需要的东西,例如这个月的平均花费,马磊在这个月的加班日等等,不用我说,你也知道:操作性数据主要是为应用程序服务,而每个系统或应用程序都有其特有的“独立性”,在开发的时候,谁会想到以后还要翻旧帐呢?

好了,换一个新的视角看问题:如果不仅仅是抽取的话,那还有些什么问题呢?如下:

第一个问题:系统集成。当成百上千张表放在一起,需要你来统计的时候,你敢肯定这个表的某一字段和另一张表的同名字段是一个含义么?或者反过来说:你敢肯定这个表的某一字段和另一张表的不相同的字段一定是毫无关系的么?这些问题可以归结成一个问题:系统缺乏集成性!解决这个问题的方法除了更好的设计你的数据库,只有靠你的耐心了。还有就是字段的转换问题,看下面这个例子:性别(sex)在数据库中有很多表达形式,可以写成m/f,也可以写成0/1来表示男/女,等等……怎么办?为了保证传唤到数据仓库的数据正确,我们必须建立不同的映射(Sorry,简单的说是:将上面提到的那种性质相同,表示的不同的数据用同一种形式表达出来),这也是一件需要耐心的工作!

第二个问题:存取现存系统的数据的效率。这很正常,当有很多表格和文件需要扫描的时候,谁能确切的知道一个文件被扫描过?如果,现存系统存在大量的数据,你为了得到其中某一些数据,而把整个数据库扫描一次,这件是一场悲剧。相信谁也不想这种事发生,具体的解决方法在下面的提出。

弄请”how to 避免这些问题”,先搞清楚从操作型环境到数据仓库可能要做那些装载工作(你会选那一项呢?)

l         装载档案数据。(联想一下布满灰尘的旧帐本就知道什么是档案了)

l         装载在操作性系统中目前已有的数据。(就在系统中的数据,还没有备份的)

l         将自数据库上次刷新以来在操作性环境中不断发生的变化(数据库的更新)装载到数据仓库中。

对于第一个选项很简单,翻账本谁不会阿?所以难度很小,但作为一个DSS分析员,放着现有的数据,你会愿意去分析十年前的数据么,不少企业发现,在很多环境下,使用旧的数据得不偿失。

对于第二个选项来说,因为只需要装载一次,所以做起来也不难。通常我们可以根据操作型环境写一个下载的顺序文件,使用这个顺序文件,可以在不破坏联机环境的前提下下载到数据仓库中。(似乎挺不错的)

第三个选项可就有点复杂了,因为,就再你装载数据的时候,数据库正发生着变化,要有效的捕捉到那些变化不是一件容易的事。所以,扫描已有的文件(或者表格)成了数据仓库体系结构设计者的主要难题。怎么办,怎么办……其实方法很多——有五种。

1.      扫描有时戳的数据,你可以清楚的知道:那些需要的数据是最近更新了的,至少我们可以有效避开时间不符的数据。(不幸的是:没有多少数据有时戳)

2.      扫描增量文件,(什么是增量文件,我也不知道,但可以肯定的是,它是由应用程序生成的,仅仅纪录发生改变的数据),不幸的事,没有多少程序有增量文件。L

3.      扫描审计文件和日志文件,这两个文件本质上和增量文件是一样的,除了大了一点,无用数据多了一点,接口程序难做一点,没别的坏处J。

4.      修改应用程序代码,(这好像过分了一点,为了设计数据仓库,居然让别人从写自己的应用程序),这并不常用,应为一个用程序的代码陈旧而且不易修改。L

5.      第五种方法就是没有方法!开玩笑。包括本书的所有资料都劝解我们不要这样做,所以,我只随便说两句:按时间做一些映像文件,比较他们的差别。但最好比用,我也觉得着方法不仅麻烦、复杂,而且需要各种资源。所以不到万不得已不用!J

第三个问题: 时基变化,难以把握。现存的操作型数据通常是当前值,精度可控,可以更新,但数据仓库中的数据是不能更新的,所以这些数据必须附带时间元素,实际操作的时候,从操作型系统传送到数据仓库时,必须在数据中进行较大范围的改变。这时,你就必须考虑数据的浓缩了,没办法,数据随时间总在变,数据仓库的空间有限阿!

到此为止,我们涉及了三个问题,以及他们的解决方法,但这还不足以使我们建一个自己的数据仓库,应为我们还没有学具体方法。下面一节的内容将……!

数据/过程模型和体系结构设计方法

首先介绍两个概念:过程建模和数据建模,简单的说,过程建模就像我们在编程之前画的流程图!有开始and结束。数据建模就像是给你白菜,萝卜、醋、食盐等,然后问你能做出什么菜,然后你很自然的回答:醋溜白菜&萝卜汤一样。没有为什么要这样做,应为只能这样做。J

过程建模是绝对不能用在数据仓库的设计上的,因为过程建模是基于需求的,它假设在细节设计之初就已经知道了需求,但在一点在建设数据从那个库的时候并不满足!

数据模型就好得多,它两边都合适!(嘻嘻,像万能胶)建造数据模型的时候不需要考虑现存的、操作型系统与数据仓库之间的差别。要做的事情看上去好像很简单:建一个企业数据模型,再建一个数据仓库模型,最好再来一个操作数据模型,可以这样理解:

企业模型à操作模型à数据仓库模型

三个方面都很重要,而且互不相同。(有点像鸡和蛋的关系)

随便聊聊数据模型吧,分三个层次的建模:高层建模(实体模型RED)、中间层建模(数据项集DIS)和底层建模(物理层)。建造的顺序是由上向下,就好像大家坐在一起,讨论出来一个大体的架构,开始中间层的设计工作(因为RED需要的数据不可能简单的抽取到,需要一定的综合方法),然后根据中间层设计底层模型,(底层模型的数据是可以从操作型数据中得到的)。

呵呵,我还是不深入讨论了,给你留一点内容可以自己琢磨一下(而且本书也不是专门讲建模的教材)。

是不是有点晕了,什么数据建模、什么三个层次,别急,等你带着这些问题去看书的时候,问题很快就没有了,我之是建议你能纪录一下自己的问题,不至于在看书的时候,连问题都忘了。J

数据建模同时也是一个拼积木的过程,每次设计的结果都是一块独特积木,这有在凑够所有的积木之后,才可以完成一幅拼图。(一个任务)

以上介绍的是数据仓库的设计方法——数据建模。下面来谈一谈设计数据仓库的几个细节问题:(这可能会很枯燥)

规范化/反规范化

这种操作的目的是减少系统的I/O操作时间。具体的方法可以归纳为两句话:为了减少I/O操作所用的时间,将一些表合并(规范化),或者引入冗余数据(反规范化)。

 

数据仓库的快照

快照是一个事件的详细纪录。举例:你用了一大笔钱买了一件心爱的东西的时候,突然发现下半个月的生活费没有了,这就是那个事件,而产生的快照如下:

[1] [2] [3]  下一页


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台