星型架构:如何执行事实表聚合?

时间:2015-11-15 06:30:48

标签: oracle schema data-warehouse star-schema snowflake-schema

https://web.stanford.edu/dept/itss/docs/oracle/10g/olap.101/b10333/globdiag.gif

假设我们有一个如上所述的开始模式。

我的问题是 - 实时如何填充事实表的colums(unit_price,unit_cost)列??

任何人都可以向我提供包含真实数据的开始模式表吗?

我很难理解星型模式......

请帮忙!..

1 个答案:

答案 0 :(得分:0)

Start schema包含两种类型的表事实表维度

明星设计的理想之处在于您可以将数据分成两部分。 静态部分在事实表中用维动态部分(=事务)进行描述。

每个交易都作为新记录存储在事实表中,并连接到定义交易上下文的周围维度。

链接中的示例包含两个事实表:SHIPMENTS和PRODUCT_CONDITIONS。 请注意,链接中的事实表被称为UNITS_HISTORY_FACT和PRICE_AND_COST_HISTORY_FACT,但我发现这不是最佳选择。

SHIPMENTS表通过定义的CHANNEL在某个TIME将一个PRODUCT的每个货件的一条记录存储到CUSTOMER。 使用相应尺寸的相应键来定义所有上述信息。 事实表还包含描述交易属性的MEASURES,此处列出了UNITS的数量。

因此,事实表的结构将是

CUSTOMER_ID
PRODUCT_ID
TIME_ID
CHANNEL_ID
UNITS

第二个事实表(底部)更有趣,因为在这里您将产品分为两部分:

定义ID,名称和其他更多静态属性的PRODUCT维度

PRODUCT_CONDITION这是事实表,其设计期望产品的价格和成本会随着时间的推移而变化。 随着价格成本的每次更改,在事实表中插入新记录并将其连接到PRODUCT和TIME(更改)。

因此,事实表的结构将是

PRODUCT_ID
TIME_ID
UNIT_PRICE
UNIT_COST

最后请注意TIME维度的设计。

将事实表与维度表连接的最佳做法是使用无意义的ID(代理键),但对于TIME维度,您应该小心。对于大(时间分区)事实表经常使用自然键(DATE格式)来部署分区功能。请参阅How I Defined a Time Dimension Using a Surrogate Key中的更多详细信息以及网络中的其他资源。