起始架构由两种类型的表事实表和维度组成。
星型设计的理想状态是您可以将数据分成两部分。
静态部分用维度描述,动态部分(=事务)在事实表中。
每个事务都作为新记录存储在事实表中,并连接到定义事务上下文的周围维度。
链接中的示例包含两个事实表:SHIPMENTS 和 PRODUCT_CONDITIONS。
请注意,链接中的事实表被称为 UNITS_HISTORY_FACT 和 PRICE_AND_COST_HISTORY_FACT,但我发现这不是最佳选择。
SHIPMENTS 表在某个时间通过定义的 CHANNEL 为客户的每次发货存储一条记录。
以上所有信息都是使用各个维度的对应键定义的。
事实表还包含描述交易属性的 MEASURES,这里是运送的 UNITS 数量。
因此事实表的结构是
CUSTOMER_ID
PRODUCT_ID
TIME_ID
CHANNEL_ID
UNITS
第二个事实表(底部)更有趣,因为在这里您将产品分成两部分:
定义 ID、名称和其他更多静态属性的产品维度
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 和其他网络资源中查看更多详细信息。