使用触发器链接到数据仓库中事实表中的时间维度是个好主意吗?
Posted
技术标签:
【中文标题】使用触发器链接到数据仓库中事实表中的时间维度是个好主意吗?【英文标题】:Is it a good idea to use triggers to link to time dimension in fact tables in a dataware house? 【发布时间】:2011-05-16 20:36:03 【问题描述】:我正在设计一个数据仓库。有多个事实表,并且很有可能将数百个事实插入到每个事实表中。尽管它有点早,但我仍然在考虑优化。
我有两张时间表
日期(唯一行 每天) 一天中的时间(唯一行 一天中的每一分钟)在我所有的事实表中,我都有完整的日期列。
您的经验是什么,我应该在代码中使用 select 语句从时间维度表中查询维度 ID,还是允许事实表中的时间维度列可以为空并使用触发器来填充值?
【问题讨论】:
大声笑当我读到这个问题时,我以为我在物理论坛上:) 【参考方案1】:当具有“神奇”值的代理键有益时,日期和时间维度是数据仓库中(非常不寻常的)情况。您可以在日期维度整数中使用 20110516 等值创建主键,在时间维度中创建主键 1 - 1440 或 1 - 2400。
我建议在您的事实记录中计算相应的值并为其添加字段,例如 CALENDAR_ID、TIME_OF_DAY_ID。根据数据的大小,您可能会受益于对 CALENDAR_ID 的索引,甚至可能会对其进行分区。如果您确定数据的质量,您可以跳过这些字段的外键约束,以在加载期间获得一些性能。
【讨论】:
+1 用于指出神奇的价值。这样的提示非常受欢迎。我刚刚意识到我不能投票,但谢谢。 @WPFAbsoluteNewBie:如果你不能投票,你可以随时接受答案 ;-)【参考方案2】: 事实表中的 FK 不允许为空值。 只需使用 ETL 从日期和时间维度查找事实表每一行的键。 DW 中没有触发器,所有加载和键查找都是通过 ETL 应用程序完成的。【讨论】:
谢谢。这回答了我的问题。但是你能解释一下为什么我不应该使用触发器吗?当然,当我说我将允许空值时,我的意思是我也不会将它们设为外键。 @WPFAbsoluteNewBie,您希望使用 EDW 尽可能加快加载速度。这些技术和所有 ETL 工具都提供了加载维度和事实所需的一切。拥有一个触发器只会减慢速度(在插入/更新时触发)并且还会将 ETL 步骤(查找)移到 ETL 应用程序之外,因此现在您有两个地方可以管理它。 @WPFAbsoluteNewBie,“事实表中的维度列”是 FK。以上是关于使用触发器链接到数据仓库中事实表中的时间维度是个好主意吗?的主要内容,如果未能解决你的问题,请参考以下文章