什么是数据仓库?
--数据仓库是一个面向主题的,集成的,非易失的且随时间不断变化的数据集合,用来支持管理人员的决策。
下面我就从数据仓库的4个基本特性来说一下它与传统的OLTP(on-linetransaction processing联机事务处理)数据库的区别
1.面向主题的
传统的OLTP数据库是面向应用进行数据组织的,而数据仓库则侧重于数据分析工作,它的数据是面向主题进行组织的。主题是一个抽象的概念,是在较高层次上将企业信息系统中的数据综合,归类并进行分析利用的抽象。例如对于一个医药连锁零售企业,其OLTP数据库所面向的应用可能是采购,销售,而其数据仓库所面向的应用可能是供应商,客户,会员等。
2.集成的
在数据仓库所有特性中,这是最重要的。数据仓库的数据是从企业中多个OLTP数据库中抽取出来的,操作型数据与分析型数据之间的差别甚大。首先,数据仓库的各个主题所对应的源数据在原有的OLTP数据库中可能存在许多重复的不一致的地方,而且这些源数据中也常常蕴涵了不同的业务处理逻辑;其次数据仓库中的综合数据常常无法从OLTP数据库系统中直接得到,因此在将数据加载到数据仓库之前,需要经过统一与综合。
3.非易失的(很少更新的)
数据仓库主要用来支持企业的分析决策,因此针对这些数据只要会进行查询操作,一般情况下并不会对数据进行修改和更新。和OLTP数据库主要存储当前数据不同,数据仓库中一般会保存长期的历史数据,数据的时间跨度可能是三年五年甚至更久,这样才能够分析出数据的长期变化趋势,比较不同时期企业的运营状况有何不同。
4.随时间不断变化的
数据仓库中数据的非易失性是针对应用来说的,但这并不表示从数据集成加载到数据仓库到最终被删除的整个数据生存周期中,所有的数据仓库数据都是永远不变的,数据仓库会随时间变化不断增加新的数据内容,不断导出和删除过期的数据内容,经常按照时间段对数据进行重新综合。
http://blog.csdn.net/wh62592855/article/details/6579839
--------------------------------------------------------------------------------------------------------------------------数据仓库术语一览数据仓库:数据仓库是一个支持管理决策的数据集合。数据是面向主题的、集成的、不易丢失的并且是时间变量。数据仓库是所有操作环境和外部数据源的快照集合。它并不需要非常精确,因为它必须在特定的时间基础上从操作环境中提取出来。
数据集市:数据仓库只限于单个主题的区域,例如顾客、部门、地点等。数据集市在从数据仓库获取数据时可以依赖于数据仓库,或者当它们从操作系统中获取数据时就不依赖于数据仓库。
事实:事实是数据仓库中的信息单元,也是多维空间中的一个单元,受分析单元的限制。事实存储于一张表中(当使用关系数据库时)或者是多维数据库中的一个单元。每个事实包括关于事实(销售额,销售量,成本,毛利,毛利率等)的基本信息,并且与维度相关。在某些情况下,当所有的必要信息都存储于维度中时,单纯的事实出现就是对于数据仓库足够的信息。我们稍后讨论有关缺无事实的情况。
维度:维度是用来反映业务的一类属性,这类属性的集合构成一个维度。例如,某个地理维度可能包括国家、地区、省以及城市的级别。一个时间维度可能包括年、季、月、周、日的级别。
级别:维度层次结构的一个元素。级别描述了数据的层次结构,从数据的最高(汇总程度最大)级别直到最低(最详细)级别(如大分类-中分类-小分类-细分类)。级别仅存在于维度内。级别基于维度表中的列或维度中的成员属性。
数据清洗:对数据仓库系统无用的或者不符合数据格式规范的数据称之为脏数据。清洗的过程就是清除脏数据的过程。
数据采集:数据仓库系统中后端处理的一部分。数据采集过程是指从业务系统中收集与数据仓库各指标有关的数据。
数据转换:解释业务数据并修改其内容,使之符合数据仓库数据格式规范,并放入数据仓库的数据存储介质中。数据转换包括数据存储格式的转换以及数据表示符的转换(如产品代码到产品名称的转换)。
联机分析处理(OLAP Online AnalyticalProcessing ):OLAP是一种多维分析技术,用来满足决策用户在大量的业务数据中,从多角度探索业务活动的规律性、市场的运作趋势的分析需求,并辅助他们进行战略发展决策的制定。按照数据的存储方式分OLAP又分为ROLAP、MOLAP和HOLAP。在客户信息数据仓库CCDW的数据环境下,OLAP提供上钻、下钻、切片、旋转等在线分析机制。完成的功能包括多角度实时查询、简单的数据分析,并辅之于各种图形展示分析结果。
数据挖掘:在数据仓库的数据中发现新信息的过程被称为数据挖掘,这些新信息不会从操作系统中获得。
切片:一种用来在数据仓库中将一个维度中的分析空间限制为数据子集的技术。
切块:一种用来在数据仓库中将多个维度中的分析空间限制为数据子集的技术。
星型模式:是数据仓库应用程序的最佳设计模式。它的命名是因其在物理上表现为中心实体,典型内容包括指标数据、辐射数据,通常是有助于浏览和聚集指标数据的维度。星形图模型得到的结果常常是查询式数据结构,能够为快速响应用户的查询要求提供最优的数据结构。星形图还常常产生一种包含维度数据和指标数据的两层模型。
雪花模式:指一种扩展的星形图。星形图通常生成一个两层结构,即只有维度和指标,雪花图生成了附加层。实际数据仓库系统建设过程中,通常只扩展三层:维度(维度实体)、指标(指标实体)和相关的描述数据(类目细节实体)超过三层的雪花图模型在数据仓库系统中应该避免。因为它们开始像更倾向于支持OLTP应用程序的规格化结构,而不是为数据仓库和OLAP应用程序而优化的非格式化结构。
粒度:粒度将直接决定所构建仓库系统能够提供决策支持的细节级别。粒度越高表示仓库中的数据较粗,反之,较细。粒度是与具体指标相关的,具体表现在描述此指标的某些可分层次维的维值上。例如,时间维度,时间可以分成年、季、月、周、日等。
数据仓库模型中所存储的数据的粒度将对信息系统的多方面产生影响。事实表中以各种维度的什么层次作为最细粒度,将决定存储的数据能否满足信息分析的功能需求,而粒度的层次划分、以及聚合表中粒度的选择将直接影响查询的响应时间。
度量值:在多维数据集中,度量值是一组值,这些值基于多维数据集的事实数据表中的一列,而且通常为数字。此外,度量值是所分析的多维数据集的中心值。即,度量值是最终用户浏览多维数据集时重点查看的数字数据(如销售、毛利、成本)。所选择的度量值取决于最终用户所请求的信息类型。http://blog.csdn.net/foxnet2003/article/details/481830--------------------------------------------------------------------------------------------------------------------------维度表和事实表事实表
每个数据仓库都包含一个或者多个事实数据表。事实数据表可能包含业务销售数据,如现金登记事务所产生的数据,事实数据表通常包含大量的行。事实数据表的主要特点是包含数字数据(事实),并且这些数字信息可以汇总,以提供有关单位作为历史的数据,每个事实数据表包含一个由多个部分组成的索引,该索引包含作为外键的相关性维度表的主键,而维度表包含事实记录的特性。事实数据表不应该包含描述性的信息,也不应该包含除数字度量字段及使事实与维度表中对应项的相关索引字段之外的任何数据。
包含在事实数据表中的“度量值”有两中:一种是可以累计的度量值,另一种是非累计的度量值。最有用的度量值是可累计的度量值,其累计起来的数字是非常有意义的。用户可以通过累计度量值获得汇总信息,例如。可以汇总具体时间段内一组商店的特定商品的销售情况。非累计的度量值也可以用于事实数据表,单汇总结果一般是没有意义的,例如,在一座大厦的不同位置测量温度时,如果将大厦中所有不同位置的温度累加是没有意义的,但是求平均值是有意义的。
一般来说,一个事实数据表都要和一个或多个纬度表相关联,用户在利用事实数据表创建多维数据集时,可以使用一个或多个维度表。
维度表
维度表可以看作是用户来分析数据的窗口,维度表中包含事实数据表中事实记录的特性,有些特性提供描述性信息,有些特性指定如何汇总事实数据表数据,以便为分析者提供有用的信息,维度表包含帮助汇总数据的特性的层次结构。例如,包含产品信息的维度表通常包含将产品分为食品、饮料、非消费品等若干类的层次结构,这些产品中的每一类进一步多次细分,直到各产品达到最低级别。
在维度表中,每个表都包含独立于其他维度表的事实特性,例如,客户维度表包含有关客户的数据。维度表中的列字段可以将信息分为不同层次的结构级。
结论:
1、事实表就是你要关注的内容;
2、维度表就是你观察该事务的角度,是从哪个角度去观察这个内容的。
例如,某地区商品的销量,是从地区这个角度观察商品销量的。事实表就是销量表,维度表就是地区表。
http://blog.csdn.net/wh62592855/article/details/4844916
--------------------------------------------------------------------------------------------------------------------------
星型模型 和 雪花模型
在多维分析的商业智能解决方案中,根据事实表和维度表的关系,又可将常见的模型分为星型模型和雪花型模型。在设计逻辑型数据的模型的时候,就应考虑数据是按照星型模型还是雪花型模型进行组织。
当所有维表都直接连接到“事实表”上时,整个图解就像星星一样,故将该模型称为星型模型, 如图 2 。
星型架构是一种非正规化的结构,多维数据集的每一个维度都直接与事实表相连接,不存在渐变维度,所以数据有一定的冗余,如在地域维度表中,存在国家A 省 B 的城市 C 以及国家 A 省 B 的城市 D 两条记录,那么国家 A 和省 B 的信息分别存储了两次,即存在冗余。
图 2.销售数据仓库中的星型模型
当有一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,其图解就像多个雪花连接在一起,故称雪花模型。雪花模型是对星型模型的扩展。它对星型模型的维表进一步层次化,原有的各维表可能被扩展为小的事实表,形成一些局部的 " 层次 "区域,这些被分解的表都连接到主维度表而不是事实表。如图 2-3,将地域维表又分解为国家,省份,城市等维表。它的优点是 :通过最大限度地减少数据存储量以及联合较小的维表来改善查询性能。雪花型结构去除了数据冗余
图 3.销售数据仓库中的雪花型模型
星型模型因为数据的冗余所以很多统计查询不需要做外部的连接,因此一般情况下效率比雪花型模型要高。星型结构不用考虑很多正规化的因素,设计与实现都比较简单。雪花型模型由于去除了冗余,有些统计就需要通过表的联接才能产生,所以效率不一定有星型模型高。正规化也是一种比较复杂的过程,相应的数据库结构设计、数据的 ETL、以及后期的维护都要复杂一些。因此在冗余可以接受的前提下,实际运用中星型模型使用更多,也更有效率。
http://blog.csdn.net/wh62592855/article/details/5643429
------------------------------------------------------------------------------------------------------------------------------
事实表和维度表的设计
数据仓库的物理模型较常见的操作型数据库的物理模型有很大不同。最明显的区别是:操作型数据库主要是用来支撑即时操作,对数据库的性能和质量要求都比较高,为了防止“garbagein,garbageout”,通常设计操作型数据库的都要遵循几个范式的约束,除非少数情况下为了性能进行妥协,才可能出现冗余。而数据仓库的建立并不上为了支撑即时操作,或者说,数据仓库的数据是来源于即时操作产生的数据,而不是直接来源于即时操作。所以它的数据质量是由操作性系统来保证的,而不是由几个范式来保证的。而且为了更好的跟踪历史信息,以及更快的产生报表,数据仓库的物理模型中存在着大量冗余字段。
数据仓库的物理模型分为星型和雪花型两种。所谓星型,就是将模型中只有一个主题,其他的表中存储的都是主题的一些特征。比如货物销量的主题仓库中,每次出售记录是事实表,而时间,售货员,商品是维度,都和事实表有联系,组织起来就是星型。而如果更细化来看,商品是有种类,产地,价格等特征的,从这个角度来看,有两个主题,一个是商品出售,一个是商品本身。组织起来就是雪花型。实际项目中,由于操作型系统业务的复杂性导致本身产生了大量的数据,所以,组织起来也以雪花型居多。
那么围绕着主题,该如何设计事实表和维度表呢?也是有规律可循的。
事实表和维度表的分界线
事实表是用来存储主题的主干内容的。以日常的工作量为例,工作量可能具有如下属性:工作日期,人员,上班时长,加班时长,工作性质,是否外勤,工作内容,审核人。那么什么才是主干内容?很容易看出上班时长,加班时长是主干,也就是工作量主题的基本内容,那么工作日期,人员,工作性质,是否外勤,工作内容是否为主干信息呢?认真分析特征会发现,日期,人员,性质,是否外勤都是可以被分类的,例如日期有年-月-日的层次,人员也有上下级关系,外勤和正常上班也是两类上班考勤记录,而上班时长和加班时长则不具有此类意义。所以一般把能够分类的属性单独列出来,成为维度表,在事实表中维护事实与维度的引用关系。
在上述例子中,事实表可以设计成如下
WorkDateEmployeeID,WorkTypeID,Islegwork,Content,
而时间,员工,工作类型,是否外勤则归为维度表。
总的来看,和其他建立主外键关系的表也都一样。但是维度表的建立是需要有层次的(虽然不是必须,但是也是典型特征),而事实表的建立是针对已经发生的事实的,是历史数据的存档,也就是说是不应该修改的。以测试部测试软件的Bug为例。每个Bug都是一个事实。这个Bug的状态在数据字典里可能设计成新建,转派,修复,拒绝等等。那么在事实表中Bug表中有一个字段为Status。当测试员或者开发人员改变了这个状态的值,事实表中该如何更新呢?是直接更新Status还是什么其他的方式?显然,为了能够追踪这个Bug的历史信息,应该是重新插入一条新的记录。那么这和以往的数据库设计有什么区别呢?可以看出对于原始记录和新插入的记录,其他字段全部是相同的,也就是全部冗余的。如果以BugID作为主键,这时候会发现主键都是冗余的(当然,插入之前只能删除主键)。所以可以看出,事实表一般是没有主键的。数据的质量完全由业务系统来把握。
例如,在AdventureWorksDW数据库中,事实表是类似于如此
事实表中的外键是指向维度表的,那么维度表又有什么特征呢?以时间维度为例
可以看出,维度表一般是有主键的。代表该类物质的一个单一个体,其他的字段一般都是有层次关系的,例如2009年2月19日是主键,那么它会有年--月--日这样的层次,为了方便统计,年月日不会在做聚合的时候才计算出来,而是在维护记录时已经计算出来。那么这些字段的冗余是否值得呢?可以这样解释:维度表的数据一般是比较少的,这个少是指相对事实表来讲的。因为事实表是与日俱增,而维度表则增长缓慢,所以绝对数字也不会太大。在事实表和维度表做连接查询的时候,会产生与事实表一样大的数据量,如果还需要groupbyYear(TimeKey)的话,其一是会增加计算,其二是由于引入了计算,索引会失效。这个代价比引入冗余字段要大的多。以AdventureWorks为例,它总共引入了日历年-月-日,财年-月-日,还有日历年-周-日,财年-周-日等等多个层次。那么它在每个层次不同级别上做聚合都是不需要引入函数来做Year(TimeKey),Month(TimeKey)这样的运算。
总的说来,事实表的设计是以能够正确记录历史信息为准则,维度表的设计是以能够以合适的角度来聚合主题内容为准则。
http://www.cnblogs.com/47613593/archive/2009/02/20/1394581.html