数据仓库--事实表和维度表

数据库 专栏收录该内容
12 篇文章 0 订阅

文章参考:https://blog.csdn.net/davidwang9527/article/details/25553117

1.数据仓库与操作型数据库的区别

数据仓库的物理模型与常见的操作型数据库的物理模型有很大不同。最明显的区别是:操作型数据库主要是用来支撑即时操作,对数据库的性能和质量要求都比较高,为了防止“garbage in,garbage out”,通常设计操作型数据库的都要遵循几个范式的约束,除非少数情况下为了性能进行妥协,才可能出现冗余;而数据仓库的数据是来源于即时操作产生的数据,而不是直接来源于即时操作,所以它的数据质量是由操作型系统来保证的,而不是由几个范式来保证的。而且为了更好的跟踪历史信息,以及更快的产生报表,数据仓库的物理模型中存在着大量冗余字段。

2.事实表与维度表的基本概念

简单的说维度表就是你观察该事物的角度(维度);事实表就是你要关注的内容。
比如要分析产品销售情况, 你可以选择按产品类别来进行分析,或按时间来分析,这样的按…分析就构成一个维度。这样就有两个维度:产品类别和时间。
下面是两个维度表结构:
产品维度表:Prod_id, Product_Name, Category, Color, Size, Price
时间维度表:TimeKey, Season, Year, Month, Date

而事实表是数据聚合后依据某个维度生成的结果表,例如:

销售事实表:Prod_id(引用产品维度表), TimeKey(引用时间维度表), SalesAmount(销售总量,以货币计), Unit(销售量)

事实数据和维度数据的识别必须依据具体的主题问题而定。“事实表”,用来存储事实的度量(measure)及指向各个维的外键值。维表用来保存该维的元数据,即维的描述信息,包括维的层次及成员类别等

所产生的数据,事实数据表通常包含大量的行。事实数据表的主要特点是包含数字数据(事实),并且这些数字信息可以汇总,以提供有关单位作为历史的数据,每个事实数据表包含一个由多个部分组成的索引,该索引包含作为外键的相关性纬度表的主键,而维度表包含事实记录的特性。事实数据表不应该包含描述性的信息,也不应该包含除数字度量字段及使事实与纬度表中对应项的相关索引字段之外的任何数据。
包含在事实数据表中的“度量值”有两种:一种是可以累计的度量值,另一种是非累计的度量值。最有用的度量值是可累计的度量值,其累计起来的数字是非常有意义的。用户可以通过累计度量值获得汇总信息,例如可以汇总具体时间段内一组商店的特定商品的销售情况。非累计的度量值也可以用于事实数据表,单汇总结果一般是没有意义的,例如,在一座大厦的不同位置测量温度时,如果将大厦中所有不同位置的温度累加是没有意义的,但是求平均值是有意义的。
一般来说,一个事实数据表都要和一个或多个纬度表相关联,用户在利用事实数据表创建多维数据集时,可以使用一个或多个维度表。
维度表可以看作是用户来分析数据的窗口,纬度表中包含事实数据表中事实记录的特性,有些特性提供描述性信息,有些特性指定如何汇总事实数据表数据,以便为分析者提供有用的信息,维度表包含帮助汇总数据的特性的层次结构。例如,包含产品信息的维度表通常包含将产品分为食品、饮料、非消费品等若干类的层次结构,这些产品中的每一类进一步多次细分,直到各产品达到最低级别。
在维度表中,每个表都包含独立于其他维度表的事实特性,例如,客户维度表包含有关客户的数据。维度表中的列字段可以将信息分为不同层次的结构级。

3.事实表和维度表的设计原则

事实表是用来存储主题的主干内容的。以日常的工作量为例,工作量可能具有如下属性:工作日期,人员,上班时长,加班时长,工作性质,是否外勤,工作内容,审核人。那么什么才是主干内容?很容易看出上班时长,加班时长是主干,也就是工作量主题的基本内容,那么工作日期,人员,工作性质,是否外勤,工作内容是否为主干信息呢?认真分析特征会发现,日期,人员,性质,是否外勤都是可以被分类的,例如日期有年-月-日的层次,人员也有上下级关系,外勤和正常上班也是两类上班考勤记录,而上班时长和加班时长则不具有此类意义。所以一般把能够分类的属性单独列出来,成为维度表,在事实表中维护事实与维度的引用关系。

总的来看,和其他建立主外键关系的表也都一样。但是维度表的建立是需要有层次的(虽然不是必须,但是也是典型特征),而事实表的建立是针对已经发生的事实的,是历史数据的存档,也就是说是不应该修改的。以测试部测试软件的Bug为例。每个Bug都是一个事实。这个Bug的状态在数据字典里可能设计成新建,转派,修复,拒绝等等。那么在事实表中Bug表中有一个字段为Status。当测试员或者开发人员改变了这个状态的值,事实表中该如何更新呢?是直接更新Status还是什么其他的方式?显然,为了能够追踪这个Bug的历史信息,应该是重新插入一条新的记录。那么这和以往的数据库设计有什么区别呢?可以看出对于原始记录和新插入的记录,其他字段全部是相同的,也就是全部冗余的。如果以BugID作为主键,这时候会发现主键都是冗余的(当然,插入之前只能删除主键)。所以可以看出,事实表一般是没有主键的。数据的质量完全由业务系统来把握。

维度表一般是有主键的,代表该类物质的一个单一个体,其他的字段一般都是有层次关系的。例如2009年2月19日是主键,那么它会有年–月--日这样的层次,为了方便统计,年月日不会在做聚合的时候才计算出来,而是在维护记录时已经计算出来。那么这些字段的冗余是否值得呢?可以这样解释:维度表的数据一般是比较少的,这个少是指相对事实表来讲的。因为事实表是与日俱增,而维度表则增长缓慢,所以绝对数字也不会太大。假如要做一个group by Year(TimeKey),那么在事实表和维度表做连接查询的时候,会产生与事实表一样大的数据量;如果没有这些维度表的分层,那么其一是会增加计算(需要根据时间字段去取出年份),其二是由于引入了计算,索引会失效。这个代价比引入冗余字段要大的多。

维度表的主键一般都取整型值的标志列类型,这样也是为了节省事实表的存储空间.

我的GitHub
QQ:2541692705
邮箱:loyalwilliams@163.com
微信扫一扫关注我,没事可以玩玩小游戏



我想去流浪,我想去读书,若有机会,江湖再见
扫一扫,领取红包,就当奖励你我付出的努力

  • 2
    点赞
  • 0
    评论
  • 8
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

要想在百度八亿网页的数据海洋中找到你所要的信息, 人工方式需要1200 多人年,而百度搜索技术不到1 秒钟。人 们被数据淹没,却渴望知识。商务智能技术已成为当今企业 获取竞争优势的源泉之一。商务智能通常被理解为将企业中 现有的数据转化为知识,帮助企业做出明智决策的IT工具集。 其中数据仓库、OLAP数据挖掘技术是商务智能的重要组成 部分。商务智能的关键在于如何从众多来自不同企业运作系 统的数据中,提取有用数据,进行清理以保证数据的正确性, 然后经过抽取、转换、装载合并到一个企业级的数据仓库里, 从而得到企业数据的一个全局视图,并在此基础上利用适当 的查询分析、数据挖掘、OLAP等技术工具对其进行分析处理, 最终将知识呈现给管理者,为管理者的决策过程提供支持。 可见,数据仓库技术是商业智能系统的基础,在智能系统开 发过程中,星型模式设计又是数据仓库设计的基本概念之一。 星型模式是由位于中央的事实环绕在四周的维度 组成的,事实中的每一行与每个维度的多行建立关系, 查询结果是通过将一个或者多个维度事实结合之后产 生的,因此每一个维度事实都有一个“一对多”的连 接关系,维度的主键是事实中的外键。随着企业交易量 的越来越多,星型模式中的事实数据记录行数会不断增加, 而且交易数据一旦生成历史是不能改变的,即便不得不变动, 如对发现以前的错误数字做修改,这些修改后的数据也会作 为一行新纪录添加到事实中。与事实总是不断增加记录 的行数不同,维度的变化不仅是增加记录的行数,而且据 需求不同维度属性本身也会发生变化。本文着重讨论数据 仓库维度的变化类型及其更新技术。
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值