关系模型与维度模型通常单独使用,但是根据需要,也可将它们混合到一起使用。为此,首先要建立一个规范化的关系模型,然后添加维度结构(主要在物理层上)。结果得到一个兼具两种父级模型优势的单个模型:它表示的实体与关系具有传统关系模型的精度,它按维度处理已过滤的、聚合事实的查询的速度与传统维度模型的速度相差无几。
现实经历促使我进行了这样的分析:在三个独立的数据仓库项目中,我分别担任过程序员、架构师和项目经理。在这些项目中,我发现了一种数据/数据库行为一致的模式,这种行为模式使得维度模型与关系模型混合构成的模型较两者中任何一种单一的模型更适合使用。
本文讨论混合设计,并提供功能齐全的参考实施。系统在 Oracle 数据库 10g 上运行,它包括完成下列任务所需的所有代码:构建数据库模式、生成示例数据、将示例数据加载到数据库模式中、构建索引和物化视图、运行示例查询、捕获运行时间以及提供运行时间的统计信息。
混合模型并不是通用型解决方案。许多项目最好使用一种传统模型或者单独使用两种模型(模型间有馈给)。但是,如果要创建一个既能以规范化格式存储数据又能以良好的性能运行聚合查询的单一数据库,那么混合模型便是一种值得考虑的设计模式。
示例业务领域
示例业务领域是在保险业内,并使用以下实体:
| 实体 | 描述 |
|
ACCOUNT |
有关客户及其与保险公司间的活动的信息 |
|
POLICY |
代表与客户的具体协议的保险合同 |
|
VEHICLE |
保险单上提到的属于客户的车辆 |
|
COVERAGE |
保险单上提到的车辆损失种类 |
|
PREMIUM |
客户每月为该保险单中的车辆承保项目所支付的费用 |
用于分析系统性能的示例业务问题与现实中的有些类似,但也包含一些极端的行为,例如:扫描事实表的多个行、检索很小一部分事实行、限制为顶部表、限制为每个表、限制为底部表等等。这些是业务用户针对维度模型提及的问题类型,并非针对关系模型提及的常见问题类型。这里不讨论关系模型的问题,因为假设对于关系特性问题(例如“显示该保险单上的所有车辆”),关系模型的性能优于维度模型。本次分析中使用的问题如下:
| ID 号 | 维度特性的业务问题 |
| 1 | 我们最早收取的年度保险费总额是多少? |
| 2 | 2002 年在新英格兰州收取的保险费是多少? |
| 3 | 我们最早在康涅狄格所得的的中级巨灾风险保险费是多少? |
| 4 | 2001 年我们在加利福尼亚所得的时间管理计划类型保险费是多少? |
| 5 | 2003 年 11 月有多少客车上了撞车险? |
| 6 | 佛蒙特州具有主要用途(保险扣除额为 1,000 美元)的红色车辆的保险费是多少?按人及事故限额对这些数目进行细分。 |
| 7 | 2000 年,保险扣除额为 1,000 美元,每人限额为 100,000 美元以及事故限额为 800,000 美元的保险项目的保险费是多少? |
| 8 | 1999 年,750cc 引擎红色汽车每月的保险费是多少? |
TAG: 构建 模型 数据仓库
10秒注册会员 结交数据仓库朋友 分享你的精彩
