数据仓库-多维数据模型

一、维表、事实表

(1)维是透视或关于一个组织想要记录的实体,描述试题的元信息。如:item:item 的维表可以包含属性item_name, branch, 和type。维表可以由用户或专家设定,或者根据数据分布自动产生和调整(即从事实表中抽取维度表)

(2)事实是数值度量的。如:事实表sales包括dollars_sold, units_sold 和amount_budgeted,也可以说是指标值。事实表包括事实的名称或度量,以及每个相关维表的关键字(索引)

 

二、星型、雪花型与事实星座:多维数据库模式

(1)星型:一种非正规化的结构,多维数据集的每一个维度都直接与事实表相连接,不存在渐变维度,所以数据有一定的冗余。

 

 

(2)雪花型:雪花模型是对星型模型的扩展。它对星型模型的维表进一步层次化,原有的各维表可能被扩展为小的事实表,形成一些局部的 "层次 " 区域,这些被分解的表都连接到主维度表而不是事实表,通过最大限度地减少数据存储量以及联合较小的维表来改善查询性能。雪花型结构去除了数据冗余。



 

(3)事实星座:又称星系模式,复杂的应用可能需要多个事实表共享维表。这种模式可以看作星形模式集。

 

 

三、数据挖掘查询语言:DMQL

(1)数据仓库和数据集市可以使用两种原语定义:一种是方定义,一种是维定义。方定义语句具有

如下语法形式:

define cube <cube_name> [<dimension_list>] : <measure_list>

(2)维定义语句具有如下语法形式:

define dimension <dimension_name> as (<attribute_or_subdimension_list>)

例子说明:

(1)图一定义的星形模式用DMQL 定义如下:

define cube sales_star [time, item, branch, location]:
dollars_sold = sum(sales_in_dollars), units_sold = count(*)
define dimension time as (time_key, day, day_of_week, month, quarter, year)
define dimension item as (item_key, item_name, brand, type, supplier_type)
define dimension branch as (branch_key, branch_name, branch_type)

define dimension location as (location_key, street, city, province_or_state, country)
define cube 语句定义一个方,叫做sales_star,它对应于例2.1 的中心表sales 事实表。该命令
说明维表的关键字和两个度量,dollars_sold 和units_sold。数据方具有四个维,分别为time, item,
branch 和location。一个define dimension 语句定义一个维。

(2)图2定义的雪花模式用DMQL 定义如下:

define cube sales_snowflake [time, item, branch, location]:
dollars_sold = sum(sales_in_dollars), units_sold = count(*)
define dimension time as (time_key, day, day_of_week, month, quarter, year)
define dimension item as (item_key, item_name, brand, type, supplier(supplier_key, supplier_type))
define dimension branch as (branch_key, branch_name, branch_type)
define dimension location as (location_key, street, city(city_key, city, province_or_state, country))

    在sales_snowflake 数据方中,sales_star 数据方的item 维被规范化成两个维表,item 和supplier。注意:
supplier 的维定义在item 的定义中说明。用这种方式定义supplier,隐式地在item 的定义中创建了
一个supplier_key。类似地,在sales_snowflake 数据方中,sales_star 数据方的location 维被规范化成
两个维表,location 和city。city 的维定义在location 的定义中说明。用这种方式,city_key 在location
的定义中隐式地创建。

(3)图3定义的星座模式用DMQL 定义如下:

define cube sales [time, item, branch, location]:
dollars_sold = sum(sales_in_dollars), units_sold = count(*)
define dimension time as (time_key, day, day_of_week, month, quarter, year)
define dimension item as (item_key, item_name, brand, type, supplier_type)
define dimension branch as (branch_key, branch_name, branch_type)
define dimension location as (location_key, street, city, province_or_state, country)
define cube shipping [time, item, shipper, from_location, to_location]:
dollars_sold = sum(cost_in_dollars), units_sipped = count(*)
define dimension time as time in cube sales
define dimension item as item in cube sales
define dimension shipper as (shipper_key, shipper_name, location as location in cube sales,shipper_type)
define dimension from_location as location in cube sales
define dimension to_location as location in cube sales

    define cube 语句用于定义数据方sales 和shipping,分别对应于图3 模式的两个事实表。注意,
数据方sales 的time, item 和location 维可以与数据方shpping 共享。例如,time 维,在定义数据方
shipping 语句之下,用“define dimension time as time in cube sales”说明。

四、度量:分类与计算

(1)分布的:

   一个聚集函数是分布的,如果它能以如下分布方式进行计算:设数据被划分为n 个集合,函数在每一部分上的计算得到一个聚集值。如果将函数用于n 个聚集值得到的结果,与将函数用于所有数据得到的结果一样,则该函数可以用分布方式计算。例如,count()可以这样计算:首先将数据方分割成子方的集合,对每个子方计算count(),然后对这些子方得到的计数求和。因此,count()是分布聚集函数。同理,sum(), min()和max()是分布聚集函数。一个度量是分布的,如果它可以用分布聚集函数得到。

(2)代数的

   一个聚集函数是代数的,如果它能够由一个具有M(其中,M 是一个整数界)个参数的代数函数计算,而每个参数都可以用一个分布聚集函数求得。例如,avg()可以由sum()/count()计算,其中sum()和count()是分布聚集函数。类似地,可以表明min_N(), max_N()和standard_deviation()是代数聚集函数。一个度量是代数的,如果它可以用代数聚集函数得到。

(3)整体的

   一个聚集函数是整体的,如果描述它的子聚集所需的存储没有一个常数界。即,不存在一个具有M个(其中,M是常数)参数的代数函数进行这一计算。整体函数的常见例子包括median(),mode()(即,最常出现的项),和rank()。一个度量是整体的,如果它可以用整体聚集函数得到。

五、DMQL翻译

设关系数据库模式如下:

time(time_key, day, day_of_week, month, quarter, year)
item(item_key, item_name, branch, type)
branch(branch_key, branch_name, branch_type)
location(location_key, street, city, province_or_state, country)
sales(time_key, item_key, branch_key, location_key, number_of_units_sold, price)

 例1中DMQL 说明被翻译成如下SQL 查询,这些查询产生所需要的sales_star 数据方。这里,聚集函数sum 用于计算dollars_sold 和units_sold:

select s.time_key, s.item_key, s.branch_key, s.location_key,
sum(s.number_of_units_sold*s.price), sum(s.number_of units_sold)
from time t, item i, branch b, location l, sales s
where s.time_key=t.time_key and s.item_key=i.item_key
and s.branch_key=b.branch_key and s.location_key=l.location_key
group by s.time_key,s.item_key,s.branch_key,s.location_key

 

猜你喜欢

转载自yugouai.iteye.com/blog/1905393