【问题标题】:Star Schema: How the fact table aggregations are performed?Star Schema:事实表聚合是如何执行的?
【发布时间】:2016-02-16 11:18:46
【问题描述】:

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

假设我们有一个如上的启动模式..

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

谁能给我一个包含真实数据的启动模式表?

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

请帮忙!..

【问题讨论】:

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


    【解决方案1】:

    起始架构由两种类型的表事实表维度组成。

    星型设计的理想状态是您可以将数据分成两部分。 静态部分用维度描述动态部分(=事务)在事实表中。

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

    链接中的示例包含两个事实表: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 和其他网络资源中查看更多详细信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-04
      • 2019-04-13
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      相关资源
      最近更新 更多