在星型模式表设计中包含关系有啥好处?

Posted

技术标签:

【中文标题】在星型模式表设计中包含关系有啥好处?【英文标题】:Is there any benefit to including relationships in your star schema table design?在星型模式表设计中包含关系有什么好处? 【发布时间】:2009-05-08 03:51:12 【问题描述】:

我正在为当前使用 SQL Server、SSIS 和 SSAS 的数据仓库设计 Fact 和 Dimension 表。将维度和事实表之间的关系编程到 SQL 中是否会真正受益?还是在创建多维数据集时手动定义关系更好?

如果我对将数据插入表中没有任何限制并因此省略了关系,那么加载和转换数据似乎更容易。

【问题讨论】:

【参考方案1】:

我将“编程关系”解释为在表上放置外键约束。

不,在数据仓库中,您不应该对事实表施加主键或外键约束。

您提到了一些问题,另一个问题是这些约束在插入行时会产生性能开销,这会使 ETL 过程更加昂贵。

对于只有事务数据库设计经验的人来说,这可能与他们所学和经历的一切背道而驰。外键约束对于您有多个进程同时修改数据的数据库至关重要。尽管开发人员尽了最大的努力,但还是有两个进程以某种方式搞砸数据的风险。约束是一个至关重要的安全网。

在维度模型中,数据库仅由一个 ETL 过程填充,并且以高度受控的方式填充。这显着降低了数据损坏的风险,以至于限制的额外成本不值得。

【讨论】:

【参考方案2】:

我认为我们需要 FK 约束,因为 DW 的更新“大部分”是受控制的,但并非总是如此。例如,在出现任何数据问题等情况下会发生手动数据修复。 [理想情况下,这一定不会发生,但是.... :)]

为确保密钥不会影响性能,我们可以在加载之前禁用它们并再次启用它们。这可以让我们确信数据是正确的,并消除加载期间的任何性能问题。要记住的另一件事是,处理时间并不是大多数数据仓库的主要限制因素。

如果您考虑到修复潜在数据完整性问题所需的时间,那么 FK 非常值得。

【讨论】:

以上是关于在星型模式表设计中包含关系有啥好处?的主要内容,如果未能解决你的问题,请参考以下文章

多对 1/2 关系的星型模式和桥接表

星型模式 - 事实表中的属性

数据仓库星型模式事实表?你怎么知道里面有啥

总和和不同计数措施(星型模式设计公案)

星型模式设计的一般理解

需要维度建模帮助 - 平面表到星型模式