【转帖】Mysql多维数据仓库指南 第一篇 第1章
Mysql多维数据仓库指南
第一篇基本原理
章节列表:
第1章:基本组成
第2章:维度历史
第3章:维度可加性
第4章:维度查询
本篇概述
你将运用关系数据库来实施一个维度数据仓库。事实表和维表这两种类型的关系表构成了一个数据仓库模式的基本部分,在本书的第一部分,你将用mysql数据库建立这些基本部分。
第1章:基本组成
概述
本章将了解两个重要的主题:星型模式和代理键。星型模式是一种维度数据仓库的数据结构。代理键是在数据仓库中添加到事实表以作为主键的字段。
在本章你将开始一个关于建立真实数据仓库的漫长旅程。一些任务需要在本章完成:
n 建立一个数据库用户。
n 建立两个关系数据库,一个作为数据仓库,另外一个作为源数据库。
n 为数据仓库建立数据库表。
n 产生代理键:
你需要建立一个源数据库是因为你的数据仓库还没有源数据。实际应用中这一步并不是必要的,因为你的数据仓库很有可能是基于已有的数据源建立的。你将在本书的第二篇开始使用这个源数据库。
第1节星型模式
一个好的维度数据仓库需要有简洁的数据结构。从技术角度看,一个简洁的结构将意味着更快速的查询。在一个维度数据仓库,关系数据库的实施中有两种类型的表,事实表和维度表。事实表包含商业事实数据(或者称为度量值)。维度表包含查询该数据库的种类。
注意在看完本书前面两个章节后,你对事实表和维度表将有更好的理解。
这些表在数据仓库中的联系模式看起来象星星状,因此该模式的术语就称为星型模式。
注意除了星型模式外,雪花模式也会用于数据仓库中。但是较之星型结构,其建模更为困难。而且,雪花模式不容易理解和应用,而且其查询性能也低于星型模式。这些缺陷是雪花模式不适合建立维度数据仓库,因此本书只是涉及星型模式。
一个星型模式包含一个事实表,该事实表环绕着两个甚至更多的维表。单星结构只有一个事实表,而多星结构则是每个星有多个的事实表,另外,维度表可以为多个事实表所共享。本章只包括单星结构,读者将会在19章“多星模式”中学习到多星结构。
图1-1 展示了一个单星结构的维度模式,这是一个我们将会在本书中扩展的销售订单的数据仓库。
图1-1一个单星型的维度模式
事实表名称的后缀通常是fact,而dim(维度dimension的缩写)通常用于维度表的后缀。根据这种命名规则,很明显,图1-1 中有一个事实表(销售订单事实表sales_order_fact)和四个维度表(客户维customer_dim,订单维 order_dim,产品维 product_dim, 以及日期维date_dim)。事实表包含一个或者多个可测的事实值(一个可以测的事实值简称为度量),而维表则对度量进行分类。
每个维表有且只有一个代理键字段,代理键字段名称的后缀是sk。维表中的每个代理键字段在事实表中都会有对应的相同的字段,这样使得数据库的查询更为容易。但是,事实表中以sk为后缀的字段并不是代表一个代理键字段。
图1-1中连接事实表sales_order_fact和四个维表的线指明了查询这些表的连接关系。这些连接是基于维表的代理键字段的。
当建立一个维度数据仓库的时候,你将会在数据仓库中自己产生代理键的值,这些代理键值不是从源数据得到的。代理键的值是连续的数值。
注意 后面关于“代理键”的章节将对代理键进行详细的说明。
现在你已经知道了星型模式,事实表,维表的概念,我们来看一个例子,如果我们对订单的订单金额感兴趣,并且决定用图1-1 中sales_order_fact表的order_amount字段作为度量。表1-1显示sales_order_fact表的一个抽样记录。
表1-1:一个事实表的抽样
将数据用电子表格形式展现:
customer_sk |
product_sk |
date_sk |
order_sk |
order_amount |
1 |
1 |
1 |
1 |
1000 |
表1-1所关联的维表中相应的数据记录将在表1-2到1-5中展示。
表1-2:客户维表中关联的行
customer_sk |
customer_no |
customer_name |
1 |
1 |
Dons Limited |
表1-3:产品维表中关联的行
product_sk |
product_code |
product_name |
1 |
1 |
Cangcung Hard Disk |
表1-4:时间维表中关联的行
sk |
date |
1 |
2007–02–01 |
表1-5:订单维表中关联的行
order_sk |
order_number |
1 |
1 |
事实表的行说明该订单的金额是$1,000。这是事实的度量。sales_order_fact表中的customer_sk字段值为1表示对应customer_dim维表中customer_sk字段值为1的行。这个关联表示,提交这个订单的是名为Dons Limited的客户。用事实表中的product_sk字段的值可以在产品维表中追踪到产品信息。通过将事实表和date_dim时间表的date_sk字段进行关联,你可以得到订单日期。同样,通过将事实表和order_dim订单维表中的order_sk字段进行关联,你可以得到订单号。
第2节代理键
维表中的代理键字段是维表的主键。代理键的值通常是连续的数值而不代表任何商业意义。相比之下,许多来自源数据的键值都有商业含义。
你将在你的数据仓库内部产生代理键值;你不可以从源数据得到代理键值,在第2章“维度历史”中我将说明这么做的目的。
在mysql中,你可以通过设置代理键字段的AUTO INCREMENT自增属性产生代理值。通过将自增字段用null值代替来插入一个递增的整数。
已经有足够的原理让我们可以开始建立我们的数据仓库了。接下来的这节,“任务”阐述了你需要在本章完成的任务的详细步骤。
----------------------------------------------------------------------------------------------------------------------------------------------