雪花日期维度
Snowflaking Date dimension
在我的星型模式中,我有一个 项目维度 ,其中包含 start_date、finish_date、[=26 等列=]、onhold_date、resume_date等
我应该为事实 table 中的所有日期引入外键并将它们连接到日期维度,还是应该将 project_dimension 雪花化为date_dimension?并非所有日期都可用于给定项目,因此将所有这些列保留在 fact_table 中可能会导致 fact_table 中有空键。
在这种情况下处理日期的最佳方式是什么?
在数据仓库中,我总是喜欢一般的星型模式,尽可能少的雪花,虽然这显然是个人偏好,并且可以取决于您使用的环境。对于Oracle(我最习惯的环境)它支持物理雪花,但最佳实践表示不雪花业务模型(逻辑)层。
就我个人而言,出于某些原因,我会推动将 FK 置于事实之上。一是维护一颗星,随着雪花引入更多连接,星通常表现更好,星处理聚合更快。第二,如果您有用户将这些数据与来自其他事实的数据相结合,那么拥有一个一致的日期维度就有意义,可以帮助提高查询性能,并且更健壮。最后,星号可能是最常见的,所以将来让其他人在这方面工作应该是 easier/the 数据将来可能会更好地与其他应用程序一起使用。
对于空 FK,我将默认为您系统的任何默认日期,对于我们来说,我们未指定的记录是 01/01/1901。我不会将它们保留为空,除非业务用户不希望看到 1901,即使那样,我也可能会用 case 语句将它们清空,但仍会在 table.[= 上填充该字段11=]
这里有一篇很好的文章描述了每种类型的 advantages/disadvantages。就像我说的,两者都不是完全正确或错误的。
http://www.dataonfocus.com/star-schema-and-snowflake-schema/
在我的星型模式中,我有一个 项目维度 ,其中包含 start_date、finish_date、[=26 等列=]、onhold_date、resume_date等
我应该为事实 table 中的所有日期引入外键并将它们连接到日期维度,还是应该将 project_dimension 雪花化为date_dimension?并非所有日期都可用于给定项目,因此将所有这些列保留在 fact_table 中可能会导致 fact_table 中有空键。
在这种情况下处理日期的最佳方式是什么?
在数据仓库中,我总是喜欢一般的星型模式,尽可能少的雪花,虽然这显然是个人偏好,并且可以取决于您使用的环境。对于Oracle(我最习惯的环境)它支持物理雪花,但最佳实践表示不雪花业务模型(逻辑)层。
就我个人而言,出于某些原因,我会推动将 FK 置于事实之上。一是维护一颗星,随着雪花引入更多连接,星通常表现更好,星处理聚合更快。第二,如果您有用户将这些数据与来自其他事实的数据相结合,那么拥有一个一致的日期维度就有意义,可以帮助提高查询性能,并且更健壮。最后,星号可能是最常见的,所以将来让其他人在这方面工作应该是 easier/the 数据将来可能会更好地与其他应用程序一起使用。
对于空 FK,我将默认为您系统的任何默认日期,对于我们来说,我们未指定的记录是 01/01/1901。我不会将它们保留为空,除非业务用户不希望看到 1901,即使那样,我也可能会用 case 语句将它们清空,但仍会在 table.[= 上填充该字段11=]
这里有一篇很好的文章描述了每种类型的 advantages/disadvantages。就像我说的,两者都不是完全正确或错误的。
http://www.dataonfocus.com/star-schema-and-snowflake-schema/