星型模式设计的组件和分析
星型模式设计是数据仓库中使用的一种数据库模式,旨在提高大型数据集的查询和分析效率。该模式由一个包含待分析数据的中心事实表以及一个或多个提供事实表中数据附加信息的维度表组成。
星型模式的组件
星型模式由四个主要组件组成。具体如下:-
事实表
维度表
属性
属性层次结构
让我们逐一了解一下 -
事实
这些是货币值。
表示业务活动的绩效指标。
例如,生产力、成本、销售额、利润、定价和数量。
事实也称为测量值。它们保存在事实表中。
文本保存在维度表中,数值存储在事实表中。公司绩效的统计指标由数值提供。销售统计数据比文本更容易理解,而用文字描述销售情况则更加困难。事实有时也被称为指标,因为它们用于评估公司的成功。
事实表究竟是什么?
明细表是事实表的另一个名称。
事实表是星型模式的中心点。
事实表提供主键以及事实或测量值。
事实表由事实和键组成。这些是公司最重要的方面。事实表,通常称为明细表,显示了业务绩效的概览。它始终位于星型模式的中心。它被测量表包围。它还包含事实表的主键。
示例
假设我们有一家零售店,向客户销售产品,并且我们希望在数据仓库中跟踪销售数据。我们可以创建一个星型模式,其中包含一个名为"sales"的事实表,用于跟踪每笔销售的信息。-
销售事实表
列名 |
数据类型 |
描述 |
|---|---|---|
sale_id |
integer |
A unique identifier for each sale |
customer_id |
integer |
A foreign key that references the customer dimension table |
product_id |
integer |
A foreign key that references the product dimension table |
store_id |
integer |
A foreign key that references the store dimension table |
sale_date |
date |
The date on which the sale was made |
quantity |
integer |
The number of units sold |
total_price |
decimal |
The total price of the sale |
在此示例中,"销售"事实表包含每笔销售的唯一标识符,以及引用客户、产品和商店维度表的外键。该事实表还包含有关销售日期、销售产品数量和销售总价的信息。此表可用于按客户、产品、商店和日期分析销售数据,以及跨不同维度聚合销售数据。
事实表特征
事实表通过插入来自操作数据库的聚合数据定期刷新。
指标是在查询执行期间计算的事实。
每个事实表都包含维度表。
事实表有助于数据汇总。
至少包含一个事实或测量值。
主键 - 所有维度表主键的并集。
维度表永远不符合 BCNF,但事实表符合。
事实表中的一行包含至少一个事实以及其维度的主键表。
度量有三种类型:加法、半加法和非加法。
有一个列少、行多、长度较长且结构较窄的表。
事实表中单个条目的信息量称为事实表的粒度。
最有价值的事实是那些数值型、值不断变化且可加性的事实。
事实表最常见的特征之一是销售额。因此,必须定期更新此值,例如每月或每季度。维度表以星型模式围绕核心事实表。事实表必须始终包含至少一个事实;否则,该事实表不存在。它不包含代理键;相反,事实表的主键由所有维度表的主键并集构成。事实表始终采用规范化的 BCNF 形式。由于事实表包含一个主键和少量事实,因此属性较少但行数较多。如果销售数据每天更新,则事实表的粒度为一天。
维度表究竟是什么?
维度表不仅提供主键,还提供决策过程中使用的特征。
产品维度、位置维度和时间维度就是一些示例。
主键到外键连接将维度表连接到事实表。
维度表提供过滤和分组功能。
维度通常是符合事实条件的描述性数据。
顾名思义,维度表包含业务实体的支持特征。每个维度表都有一个主键和必需属性。客户表就是一种维度表。外键连接将每个维度表连接到事实表。
示例
假设我们有一家零售店,向客户销售产品,并且我们希望在数据仓库中跟踪产品信息。我们可以创建一个星型模式,其中包含一个名为"产品"的维度表,其中包含每个产品的相关信息 -
产品维度表
列名 |
数据类型 |
描述 |
|---|---|---|
product_id |
integer |
A unique identifier for each product |
product_name |
varchar |
The name of the product |
category |
varchar |
The category to which the product belongs |
price |
decimal |
The price of the product |
supplier_id |
integer |
A foreign key that references the supplier's dimension table |
brand_id |
integer |
A foreign key that references the brand's dimension table |
在此示例中,"产品"维度表包含每个产品的唯一标识符,以及有关产品名称、类别、价格以及引用供应商和品牌维度表的外键的信息。此表可用于按类别、价格范围、供应商和品牌分析产品信息,以及跨不同维度汇总产品信息。
维度表的特点包括
维度表通常称为查找表或引用表。
维度表尚未规范化。
包含一个主键,它是事实表主键的一部分。
维度不会随时间变化或变化非常缓慢。
它们具有少量行和大量列。
大多数星型模式都包含时间维度。
维度表之间没有耦合;相反,每个维度表都通过主键-外键连接连接到一个事实表。
代理键通常是主键。
这些被称为参考表,因为它们支持事实表中提供的信息。事实表显示公司实体的摘要,而维度表为事实表提供支持。维度表未进行规范化,因为这样做会导致维度表拆分为多个表。这会增加模式中的连接数量,使星型查询更加困难,执行时间更长。维度表连接到事实表,但不相互连接,因为这是不必要的。每个维度表都引入了代理键,用于唯一标识每个条目。
属性是什么?
这些是维度表的列。
客户维度表的示例包括客户姓名、年龄、性别、婚姻状况等。
这些大多是描述性值。
列名称为属性。客户特征是客户表中用于准确定义客户的详细信息。客户特征包括其姓名、性别、年龄和婚姻状况。通常,它们是描述性数据,例如姓名和地址。
假设我们有一家向客户销售产品的零售店,并且我们希望在数据仓库中跟踪有关客户的信息。我们可以创建一个星型模式,其中包含一个名为"客户"的维度表,其中包含每个客户的属性 -
客户维度表 -
列名 |
数据类型 |
描述 |
|---|---|---|
customer_id |
integer |
A unique identifier for each customer |
first_name |
varchar |
The first name of the customer |
last_name |
varchar |
The last name of the customer |
gender |
varchar |
The gender of the customer |
date_of_birth |
date |
The date of birth of the customer |
varchar |
The email address of the customer |
|
address |
varchar |
The street address of the customer |
city |
varchar |
The city where the customer resides |
state |
varchar |
The state where the customer resides |
country |
varchar |
The country where the customer resides |
在此示例中,"客户"维度表包含每个客户的唯一标识符,以及客户姓名、性别、出生日期、电子邮件地址和地址信息等属性。此表可用于按人口统计特征、位置和购买历史记录分析客户信息,以及跨不同维度汇总客户信息。
什么是属性层次结构?
属性可以按层次结构组织。
层次结构级别具有 N:1 关系。
确定功能依赖顺序。
示例 - 产品 - 产品类型,产品类型 - 行业
时间维度的层次结构 - 日期 - 周 - 月 - 季度 - 季度年份。
位置层次结构 - 城市 -> 地区 -> 州 -> 国家/地区 -> 商店
属性层次结构用于分析多个聚合级别的数据,通常从最高级别开始。
某些维度表列仅用于维度描述,不会在属性层次结构中使用。
当我们需要更细或更粗粒度的信息时,属性层次结构就派上用场了。我们可以查找特定季度的总体销售额。如果存在时间层次结构,我们可以检索同一季度某个月份发生的销售额。如果我们进一步深入层次结构,我们可以确定该月某一周的总体销售额。同样,我们可以沿着结构向上查找。并非所有维度表都需要属性层次结构。
数据聚合有哪些方法?
数据层次结构由属性层次结构定义。
上卷 - 获取粒度较粗或层次结构中较高级别的数据。
下钻 - 获取粒度更细的数据。
星型查询到底是什么?
星型查询是事实表和多个维度表的连接。
这些问题确实很难。
它需要很长时间才能完成。
星型查询是在星型模式上运行的 SQL 查询。星型查询的名称源于我们在星型模式上运行查询。由于星型模式在事实列和维度列之间有多个连接,因此星型查询非常困难。由于存在多个连接关系,星型查询的执行需要数小时。
结论
总而言之,星型模式设计是一种高效的数据建模方法,可用于数据仓库中的分析。该模式由一个包含待分析定量数据的中心事实表,以及一个或多个提供事实表中数据的额外上下文和描述性数据的维度表组成。事实表使用外键链接到维度表,从而支持跨不同维度和属性执行查询和分析。星型模式设计的分析包括根据维度表中的各种维度和属性聚合和查询事实表中的数据,以生成提供数据洞察的报表和可视化效果。使用星型模式设计的好处包括更快的查询性能、简化的数据建模以及最终用户的易用性。

