事实表外键为空?


9

我是数据集市设计的新手,需要清除一些概念。

我已经阅读了一些有关维建模的知识,在该模型中,事实表存储了对维表的外键引用。

现在假设我有一个电话号码维度表和一个phone_extension维度表。(这些表具有不同的详细信息,因此我无法将它们组合在一起)

据我了解,这两个维度表都将具有整数主键以获得更好的性能,事实表将具有其自己的整数主键,并且还存储对这些维度表的外键引用。

但是,假设我有一种情况,并非所有电话号码都有与之相关的phone_extension。(某些电话号码不需要加分机号)

对于具有扩展名的电话号码,事实表将同时具有两个维表的外键引用,但是如何捕获只有电话号码却没有扩展名的情况(反之亦然,即没有电话号码的扩展名) ?

我是否应该使用事实表中电话号码为FK且具有值且phone_extension外键为null的方式捕获此类信息?还是这些无关的对象没有记录在事实表中?

我还需要生成此数据集市的报告。那么,我是从查询事实表并检索维键值开始还是直接从维表中报告?

感谢您阅读本文的时间!!
感谢任何帮助!


可能是服务器故障问题?

Answers:


10

如果这些维未知或不适用,则可以将FK留给某些维表为NULL。您只需要在执行报告查询时记住使用外部联接。

或者,某些人为数据集市维度创建“无”和/或“无”维度记录,然后填充事实表FK指向这些维度,而不使用NULL。这样做的人喜欢这种方法,因为他们对外部联接不满意。

实际上在表中使用NULL FK的人通常会讨厌那些具有外部联接版本的人。;)(换句话说,这是一个风格问题,可能引发宗教战争)

我说可以做任何您喜欢的事情,但是要选择一种方法并坚持下去。


10

不要在仓库或市场中放入零值。

仓库应该规范化(至少是BCNF),因此应该排除空值。如果空值存在于数据源中,则可以将它们保留在登台表中,但是仓库本身不需要它们。

市场应该设计为支持演示工具和用户查询。空值只是阻碍了这些事情的发生,因为它们从不显示,并且使用户查询更加复杂且容易出错-尤其是在经常需要联接的外键列中。


我同意,但是出于Brown引用的原因:拥有明确的综合记录非常有价值,因为该字段原本为NULL。NULL不会告诉用户任何内容;“无法解析值”,“字段留空”或“尚未分配客户经理”很有用。
所有行业的乔恩,2014年

0

事实中的维度键不应该为null,并且imho拥有维度的fk来消除最终用户,报告等对左外部联接的需求。事实的所有负载都应对该维度进行左外部联接,并且默认为0键或根本没有钥匙就失败了。最好不要失败,而不是加入维度,并且不知道您实际上错过了行,直到某些用户最终找到它为止(如果发生了)

在phone_extension维度中创建“ n / a”记录并链接至该记录。

我的themb规则是dwh end datamart中唯一可空的值是事实本身,因此像avg之类的聚合函数仍然可以使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.