DB2数据仓库环境的物理数据库设计:设计物理数据模型

为">数据仓库设计物理数据模型时,应集中精力关注各表的定义以及表之间的关系。

在为物理数据模型设计表时,应考虑使用以下指导原则:

为各维度表定义一个主键,确保最细粒度的级别键的惟一性,并在必要时促进引用约束的实现。
避免在事实表上使用主键和惟一索引,在涉及大量维度键时尤为如此。在摄取大量数据时,这些数据库对象会导致性能成本。
将所连接的各维度对之间的引用约束定义为信息型约束,帮助优化器生成有效的访问计划,从而提高查询性能。
使用 NOT NULL 子句来定义一些列。认识到 NULL 值是指示数据库内数据质量问题的一个好的指标,应该在将数据插入数据库之前研究它。
尽可能将外键列定义为 NOT NULL。
对于 DB2 版本 9.7 或更早的版本,应该为各外键定义单独的索引,以提高星形连接查询的性能。
对于 DB2 版本 10.1,应定义拥有多个外键列的复合索引,以提高星形连接查询的性能。这些索引支持优化器利用全新的 zigzag 连接方法。
在适当的时候,可以使用 NOT NULL 子句、基于单一整数列定义维度级别键。这种定义级别键的方法支持高效的连接和分组。对于雪花维度,级别键通常是主键,而该主键通常是一个整数列。
在数据仓库设计中实现标准数据类型,在编译查询计划时为优化器提供更多的选项。举例来说,如果将一个包含数字的 CHAR(10) 列连接到 INTEGER 列,则需要使用强制转换功能。这种连接会导致性能下降,因为优化器可能无法选择恰当的索引或连接方法。例如,在 DB2 版本 9.7 或更早的版本中,优化器无法选择散列连接,可能也无法利用恰当的索引。

定义和选择级别键

级别键就是一个表中的一个列或多个列的组合,它惟一地标识了维度表中的层级级别。层级级别的一个示例就是日期维度中的 DAY、WEEK、MONTH 和 YEAR。另一个示例就是用来存储零售店铺数据的 STORE 维度表的列。更为复杂的级别键示例是同一个 STORE 表中 CITY、STATE 和 COUNTRY 列的组合级别键在数据仓库内的应用极为广泛,用于将维度表连接到事实表,同时支持聚合表和 OLAP 应用程序。良好的级别键设计能够优化数据仓库查询的性能。

级别键可能属于以下类型之一:

根据来源识别数据源内记录的自然键。举例来说,如果 CITY_NAME 列在维度表中拥有惟一值,那么可以将它用作自然键,表示 CITY 维度的级别。
使用代理键作为标识,帮助减小维度较低的表或事实表的大小。大多数情况下,代理键是一个整数列。您也可以对较大的代理键使用 BIGINT 或 DECIMAL 数据类型。例如,STORE_ID 是生成的惟一整数值,用于标识一家店铺。如果使用整数而非大字符串来表示店铺名称或多列的组合(如 STORE_NAME、CITY_NAME 和 STORE_ID),那么所需占用的事实表空间将会更少。

对所有维度级别列使用代理键能够为以下领域提供帮助:

通过降低 I/O 来提高性能。
降低大型事实表中的外键存储要求。
支持缓慢变化的维度 (SCD)。举例来说,CITY_NAME 可能会发生变化,但 CITY_ID 仍保持不变。

如果维度是非规范化的,那么我们倾向于不使用代理键。这个示例展示了创建某些级别上无代理键的 STORE 维度表的语句:

CREATE TABLE STORE_DIMENSION
( STORE_ID INTEGER NOT NULL,
STORE_NAME VARCHAR(30),
CITY_NAME VARCHAR(30),
STATE_NAME VARCHAR(30),
COUNTRY_NAME VARCHAR(30));

STORE 维度能保持正常功能,因为可以将级别键定义为惟一地标识各级别。举例来说,要惟一地标识 CITY 级别,可以这样定义一个键:[COUNTRY_NAME, STATE_NAME, CITY_NAME]。遗憾的是,在表连接或 GROUP BY 子句中,由三个字符列组成的键的执行方式与单一整数列并不相同。

可以考虑为各级别显式定义一个整数键的方法。对于使用 GROUP BY CITY_ID、STATE_ID、COUNTRY_ID 子句的查询(而非使用 GROUP BY CITY_NAME、STATE_NAME 和 COUNTRY_NAME 子句),这种方法也非常适用。下面的示例展示了通过这种方法创建 STORE 维度表的语句:

CREATE TABLE STORE_DIMENSION
( STORE_ID INTEGER NOT NULL,
STORE_NAME VARCHAR(30),
CITY_ID INTEGER,
CITY_NAME VARCHAR(30),
STATE_ID INTEGER,
STATE_NAME VARCHAR(30),
COUNTRY_ID INTEGER,
COUNTRY_NAME VARCHAR(30));

使用 RUNSTATS 命令收集“列组统计信息”,除了 CITY_NAME、STATE_NAME 和 COUNTRY_NAME 列之间的关系之外,还能捕获代理键列之间的统计关系。

时间: 2024-08-02 05:53:58

DB2数据仓库环境的物理数据库设计:设计物理数据模型的相关文章

DB2数据仓库环境的物理数据库设计:简介

良好的http://www.aliyun.com/zixun/aggregation/8302.html">数据仓库设计是最大程度地提高和加速数据仓库实现的投资回报的关键所在.良好的数据仓库设计能带来在可伸缩性.平衡性.灵活性方面都足以满足当前和未来需求的数据仓库.按照本文中提供的最佳实践建议,您可以在设置数据仓库时保证高效的查询性能.简化的维护和健壮的恢复选项,从而获得长期成功. 数据仓库设计分为两个阶段:设计逻辑数据模型和设计物理数据模型. 数据仓库设计的第一个阶段是创建逻辑数据模型,

DB2数据仓库环境的物理数据库设计:DB2 10.1数据仓库设计特性

在您的http://www.aliyun.com/zixun/aggregation/8302.html">数据仓库中,利用 DB2 版本 10.1 的新特性进一步简化数据生命周期管理.优化存储利用率,并存储和检索基于时间的数据.DB2 版本 10.1 引入了以下新特性: "存储优化""多温度带数据存储"第 32 页介绍的"自适应压缩"第 32 页介绍的"使用时态表实现时间旅行查询" 存储优化 在 DB2 版本

DB2数据仓库环境的物理数据库设计:设计聚合层

聚合或汇总数据有助于提高查询性能.您可以利用 DB2 数据库对象,这有助于您聚合数据,例如物化查询表 (MQT).视图或视图 MQT. MQT 也称为汇总表,它能预先计算开销较高或使用频繁的某个(或一组)查询的结果.结果集会存储在专用表中,随后可利用此表来应答常用的查询或类似的查询.在填充或刷新 MQT 中的数据时,引用的源表称为基表. 使用物化查询表 通过利用 MQT 聚合不同级别的数据,可以支持分析数据的应用程序,无需设计多个基表,也无需牺牲数据的原子粒度. 分析查询的次优性能往往是使用 M

DB2数据仓库环境的物理数据库设计:样例场景

这一节介绍了一个物理http://www.aliyun.com/zixun/aggregation/14208.html">数据模型,此模型是针对一家销售大量产品的虚构企业的数据仓库样例场景而设计.该企业数据仓库存储所有这些产品的日常销售数据. 本文中的示例基于样例场景. 物理数据模型设计 下图中的物理数据模型展示了样例数据仓库中使用的表和关系. 图 5. 样例数据仓库的物理数据模型 维度表 样例场景的物理数据模型包含以下维度表,其中存有日期.产品和店铺数据: TB_DATE_DIM TB

DB2面向OLTP环境的物理数据库设计:表

DB2 数据库将数据存储在表中.有几种类型的表可以存储永久性数据,如多维集群表.分区表和范围集群表.除了用于存储永久性数据的表之外,也有一些表可用来展示结果.汇总表.临时表. 根据数据的显示形式和事务类型,您可能会找到一个表类型,提供可以为您的环境优化存储和查询性能的特定功能. 选择合适的表类型 表类型的选择取决于业务和应用程序的需求.表中存储的数据的性质和查询的性能要求.下节描述了每种表类型适合在何时使用. 基表 基表可以保存永久性数据.DB2 数据库的基表有以下几种类型: 常规表 有索引的常

DB2面向OLTP环境的物理数据库设计:数据库操作和维护

在数据库系统进入生产环境之后,工作重点会转向对数据库系统的日常维护.日常运营方面包括性能管理.问题诊断和维护,它们必须继续满足业务http://www.aliyun.com/zixun/aggregation/14189.html">服务水平协议. 面向 OLTP 环境的物理数据库设计应包括运营和维护任务的时间表.本节提供了此类活动的总结. 恢复策略 作为 RAS 整体策略的一部分,恢复策略在满足您的 RAS 目标中发挥着重要作用.虽然事实上在许多层次上都存在冗余,但在定义恢复点目标 (R

DB2面向OLTP环境的物理数据库设计:数据类型

为一个数据库设计表,这涉及到选择一个合适的http://www.aliyun.com/zixun/aggregation/14208.html">数据模型和数据类型.数据类型是一个列属性定义,它指示了应该将什么类型的数据存储在一个表列中. 根据所存储的数据的性质小心选择正确的数据类型,这有助于最大限度地减少存储需求. 最大限度地减少数据行消耗的空间,这有助于将更多行放在一个数据页面中.如果一个数据页面中有更多的行,那么这样可以提高缓冲池命中率,减少 I/O 成本,并实现更好的查询性能.DB

DB2面向OLTP环境的物理数据库设计:查询设计

在最基本的层面,包括选择.插入.更新和删除在内的 SQL 操作是应用程序与 DB2 数据库进行交互的方式.应用程序的总体性能和体验受到该应用程序所用的 SQL 操作的影响. 设计.维护.监视和调优 SQL 查询的完整处理超出了本文的范围.然而,我们从较高层次概述了查询设计的工具和一般准则,因为查询设计和物理数据库设计彼此密切相关. 大多数物理数据库设计的特征对 SQL 语句并不明显,但为了更好地使用 DB2 特性,在编写查询时需要考虑到数据库的物理特征,如索引.例如,使用范围分区表时,选择查询即

DB2面向OLTP环境的物理数据库设计:数据和索引压缩

您可以通过使用内置在 DB2 for Linux, UNIX and Windows 数据库中的压缩功能来减少表.索引和备份映像的大小,从而减少数据所需的存储量. 表和索引通常包含重复信息.这种重复可能是单独或合并的列值,也可能是列值的共同前缀,或者是在 XML 数据中的重复模式.压缩方法可以使用短字符串或符号来代替重复的信息. 您可以使用一些压缩功能来减少存储表和索引功能所需的空间,同时也可以采用一些功能来确定压缩可以提供的节省.您还可以使用备份压缩来减少备份的大小. DB2 Version