我正在为当前使用SQL Server,SSIS和SSAS的数据仓库设计Fact和Dimension表。通过将维度和事实表之间的关系编程到SQL中,我能获得任何真正的好处吗?或者我最好只是在创建立方体时手动定义关系?
如果我对数据插入表中没有任何限制,那么加载和转换数据似乎更容易,因此忽略了关系。
答案 0 :(得分:6)
我将“关系编程”解释为将外键约束放在表格上的含义。
不,在数据仓库中,您不应对事实表强加主键或外键约束。
您已经提到了一些问题,另一个问题是这些约束会在插入行时产生性能开销,这会使ETL过程变得更加昂贵。
对于只有交易数据库设计经验的人来说,这可能违背了他们所学到和经历过的一切。外键约束对于您有多个进程同时修改数据的数据库至关重要。尽管开发人员付出了最大的努力,但是有两个进程以某种方式搞砸了数据的风险。这些限制是一个至关重要的安全网。
在维度模型中,数据库仅由一个ETL过程填充,并且以高度可控的方式填充。这大大降低了数据被破坏的风险,使得额外的约束成本不值得。
答案 1 :(得分:1)
我认为我们需要有FK约束,因为DW的更新主要是“控制”但并非总是如此。例如,手动数据修复发生在任何数据问题等情况下。 [理想情况下,这不可能发生,但......:)]
为了确保Keys不影响性能,我们可以在加载之前禁用它们并再次启用它们。这可以让我们确信数据是正确的,并且还可以消除负载期间的任何性能问题。另一件需要记住的事情是,处理时间不是大多数数据仓库的主要限制因素。
如果您考虑修复潜在数据完整性问题所需的时间,那么拥有FK非常值得。