KDT#43 维度建模中处理空值的策略
关系数据库中都支持空值(NULL)来表示数据不存在。但是在数据仓库中,一般不建议继续保留这些空值。下面介绍维度建模中的三种处理空值的策略。
1.事实表的外键为空值。
这种情况出现的原因主要有两个,一个是在数据抽取时外键值还不知道,另一个是在源系统中外键值丢失。这时,引用完整性遭到了破坏。第一种情况通常出现在累计快照事实表中,因为有些事件还没有发生,所以对应的时间不存在。这时,保留空值作为外键是不可取的,我们应该在日期维度中建立一条记录,标识为”还未发生“。然后将未发生的日期关联到该记录上。同样,对于第二种情况,我们应该在相应的维度表中建立记录,标识为”已丢失“。
2.事实表中的事实为空值。
这种情况下,空值通常有两种含义,一种是值不存在,另一种是系统没有记录该值。不论是哪一种,我们都应该将空值保留下来,大多数的数据库系统都能对空值很好的处理聚集函数,如SUM,MAX,MIN,COUNT,AVG。这时,将空值替换成零反而有可能使聚集函数不准。
3.维度表中的属性为空值。
维度表中的属性为空值可能是因为属性没有捕获到,或者属性不知道。这时,我们不应该保留空值,而应该将空值替换为”不知道“或者”未提供“之类。
总的来说,在数据仓库中空值容易引起误解,我们要尽可能的将空值替换成实际的值。