使用触发器链接到数据仓库中的事实表中的时间维度是一个好主意吗?

时间:2011-05-16 20:36:04

标签: optimization triggers data-warehouse

我正处于设计数据仓库的中间。有多个事实表,很可能在每个事实表中插入了数百个事实。即使它有点早,但我仍在考虑优化。

我有两张时间表

  • 日期(唯一的一行 每一天)
  • 一天中的时间(独特的行 (一天中的每一分钟)

在我的所有事实表中,我都有完整的日期列。

您的经验是什么,我应该在代码中使用select语句来查询时间维度表中的维度ID,还是我允许事实表中的时间维度列为空,并使用触发器来填充值?

2 个答案:

答案 0 :(得分:1)

当具有“魔术”值的代理键有益时,日期和时间维度是数据仓库中的(非常不寻常)情况。您可以在日期维度整数中创建主键,其值为20110516,时间维度为1 - 1440或1 - 2400。

我建议您在事实记录中计算相应的值并为其添加字段,例如CALENDAR_ID,TIME_OF_DAY_ID。根据数据的大小,您可能会受益于CALENDAR_ID的索引,甚至可能在其上进行分区。如果您确定数据质量,则可以跳过这些字段上的外键约束,以便在加载过程中获得一些性能。

答案 1 :(得分:0)

  • 事实表中的FK不允许空值。
  • 只需使用ETL从事实表的每一行的日期和时间维度中查找键。
  • DW中没有触发器,所有加载和键查找都是通过ETL应用程序完成的。