【问题标题】:Star schema many-to-many for time series data时间序列数据的星型模式多对多
【发布时间】:2020-07-21 22:10:57
【问题描述】:

我有一个数据仓库/星型模式建模问题。

我有不同位置(尺寸)的仪表读数(事实)。每个位置都有多个不同角色的组织。我想在数据仓库模式中对此进行建模。目前的计划是:

fact_meter_readings
   timestamp,
   location_id,
   meter_reading (number)

dim_locations
   location_id
   name

dim_location_organisations
   location_id
   organisation_id
   role_id
   organisation_name
   role_name

Unique key (location_id, organisation_id, role_id)

最后一张桌子是有问题的。尽管该表具有唯一约束,但该唯一约束并未与事实表共享,这是我不清楚的一点。

我想使用此架构来回答问题,例如 sum themeter_reading 按组织分组,他们在其中扮演“操作员”角色

例如

select 
  lo.organisation_name,
  sum(meter_reading) 
from fact_meter_readings m
inner join dim_location_organisations lo
on lo.location_id = m.location_id
where lo.role_id = xyz
group by lo.organisation_name

由于维度表没有与事实表共享的唯一键,这里有什么问题吗?显然查询需要小心处理以避免重复计算事实。

【问题讨论】:

    标签: sql data-warehouse star-schema


    【解决方案1】:

    我将创建一个名为组织的新表,因为位置和组织是两个不同的概念。然后可以通过位置表查询组织:

    fact_meter_readings
       timestamp,
       location_id,
       meter_reading (number)
    
    dim_locations
       location_id
       name
    
    dim_location_organisations
       location_id
       role_id
       role_name
    
    dim_organization
       organization_id
       location_id
       organisation_name
    

    也许“角色”也应该有自己的维度。 查询会更长一些,但我相信为每个概念赋予自己的维度会更清晰,并且会在未来得到回报

    【讨论】:

    • 我更喜欢保持尺寸尽可能平坦。在伴随关系系统中,这些概念是高度规范化的,这里的维度是同步的。
    • mm,好吧,在这种情况下,我看不出有什么大问题。但这可能会导致未来的混乱和人们不经意间重复计算。一个建议:如果您没有存储问题,您可能会发现它很有用,按照我的建议标准化暗淡,然后创建一个大表,这样就没有人需要在连接上投入时间。带有查询结果的某种具体化视图。我们在过去的几个工作中曾经这样做过,而且效率很高
    • 是的,重复计算是有风险的,这就是为什么我对不同结构的想法感到好奇。据我了解,您上面的结构不会防止重复计算,而只是在查询中添加一个额外的连接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 2016-05-13
    • 2013-04-17
    • 1970-01-01
    相关资源
    最近更新 更多