OBIEE – Schema

Schema是整个数据库的逻辑描述。它包括所有类型的记录(含所有相关的数据项和聚合)的名称和描述。就像数据库一样,数据仓库(DW)也需要维护一个schema。数据库使用关系模型,而DW使用Star,Snowflake和Fact Constellation Schema (又称Galaxy Schema)。
星型Schema
在一个星型Schema中,有多个去归一化的维度表,它们只能连接到一个事实表。这些表采用逻辑连接来满足一些业务分析需求。这些schema是多维结构,用于使用BI报告工具创建报表。
星形Schema中的维度包含一组属性,事实表包含所有维度的外键和测量值。

在上面的Star Schema中,有一个事实表“Sales Fact” 在中心,并且被用主键连接到4个维度表。这些维度表不会被进一步归一化,这种多表连接在DW中被称为星型Schema。
事实表还包含度量值 - dollar_sold和units_sold。
雪花Schema
在雪花Schema中,有多个归一化的维度表,它们只与一个事实表关联。这些表采用逻辑连接来满足一些业务分析需求。
星型Schema和雪花Schema之间的唯一区别在于后者的维度表可以被进一步归一化。归一化将数据分割成附加表。雪花Schema的归一化减少了数据冗余却没有丢失任何信息,因此它易于维护并且节省存储空间。

在上面的Snowflakes Schema示例中,Product表和Customer表被进一步归一化以节省存储空间。有时,当您执行需要在归一化表中直接处理行的查询时,它还提供了性能优化,因此它不处理主维度表中的行,而是直接来到schema中的归一化表。
粒度
表中的粒度表示存储在表中的信息级。数据的高粒度意味着数据处于或接近事务级,具有更多细节。低粒度意味着数据的信息级较低。
事实表通常被设计成低粒度级。这意味着我们需要找到可以存储在事实表中的最低级别的信息。在日期维度中,粒度级可以是年,月,季度,时期,周和日。
定义粒度的过程由两个步骤组成 -
- 确定要包括的维度。
- 确定放置每个信息维度层次的位置。
渐变维
渐变维指的是随着时间改变的属性值。这是DW的常见概念之一。
示例
Andy是XYZ公司的员工。他于2015年7月首次在纽约市工作。员工查询表中的原始录入具有以下记录 -
Employee ID | 10001 |
---|---|
Name | Andy |
Location | New York |
随后,他搬迁到加州洛杉矶。 XYZ Inc.现在应该如何修改其员工表以反映这一变化?
这就是所谓 “渐变维” 的概念。
有三种方法可以解决这类问题 -
解决方案1
用新记录取代原始记录。没有旧记录的痕迹留下来。
在渐变维中,新的信息只是覆盖原来的信息。换句话说,没有历史记录。
Employee ID | 10001 |
---|---|
Name | Andy |
Location | LA, California |
- 好处- 这是处理渐变维度问题的最简单方法,因为不需要跟踪旧信息。
- 缺点- 所有历史信息丢失。
- 用途- 当DW不需要跟踪历史信息时,应使用解决方案1。
解决方案2
在员工维度表中输入新记录。所以,员工Andy被视为两个人。
新记录被添加到表中以表示新信息,并且原始记录和新记录都将被显示。新记录获得自己的主键如下 -
Employee ID | 10001 | 10002 |
---|---|---|
Name | Andy | Andy |
Location | New York | LA, California |
- 好处- 这种方法可以让我们存储所有的历史信息。
- 缺点- 表的大小增长更快。当表的行数非常多时,表的占用空间和性能会成为问题。
- 用途- 当DW需要保存历史数据时,应使用解决方案2。
解决方案3
修改Employee 维度中的原始记录以反映变化。
将有两列表示特定的属性,一列表示原始值,而另一列表示新值。还会有一个列表示当前值何时激活。
Employee ID | Name | Original Location | New Location | Date Moved |
---|---|---|---|---|
10001 | Andy | New York | LA, California | July 2015 |
- 好处- 新信息已被更新却没有增加表的大小。这允许我们保留历史信息。
- 缺点- 当一个属性值被更改多次时,这个方法不会保留所有的历史记录。
- 用途- 解决方案3只能在DW需要保留历史变化的信息时使用。
归一化
归一化是将表分解成一些较少冗余的较小表而不丢失任何信息的过程。因此,数据库归一化是组织数据库的属性和表以最小化数据冗余(重复数据)的过程。
归一化的目的
- 用于消除某些类型的数据(冗余/重复)以提高一致性。
- 它把与对象类型相对应的表保持在简单形式,以此提供了最大的灵活性来满足将来的信息需求。
- 它产生一个更清晰和可读的数据模型。
优点
- 数据完整性。
- 增强数据一致性。
- 减少数据冗余和所需空间。
- 降低更新成本。
- 响应即席查询的最大灵活性。
- 减少每个块的总行数。
缺点
数据库的查询性能下降,因为必须执行多表连接( joins )才能从多个归一化表中检索相关数据。
您必须理解数据模型以执行正确的多表连接。
示例

在上面的示例中,绿色块内的表是红色块内的表的一个归一化表。绿色块内的表不那么冗余了,行数也较少,而且没丢失任何信息。