我们是否应该将所有与 `user` 相关的字段放在数据仓库中的 `dim_user` table 中?

Should we put all the fields related to the `user` in a `dim_user` table in a data warehouse?

假设有一个数据仓库包含一个事实 table 和三个维度 table。

事实table:

维度tables:

这些 table 的所有数据都是从我们的业务系统中提取的。

在业务系统中,用户有很多属性,有些属性会随时间发生变化(mobile, avatar_url, nick_name, status),有些一旦记录被创建,其他的就不会改变(id,gender,register_channel).

所以通常在 dim_user table 中,我们应该使用哪些字段,为什么?

Dim_User 应同时具有可更改和不可更改的字段。在非规范化模型中,最好将一个维度的所有相关属性保存在一个 table 中。

此外,最好在维度 table 中保留有关用户的所有可用信息,因为它们可能用于报告目的。如果报告不需要它们,您可以跳过它们。

如果想保留用户的变更历史,可以考虑实现slowly changing dimensions。否则,您可以在维度属性发生变化时更新它们。它被称为 I 型 SCD。