我们是否应该将所有与 `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:
- fact_orders
维度tables:
- dim_user
- dim_product
- dim_date
这些 table 的所有数据都是从我们的业务系统中提取的。
在业务系统中,用户有很多属性,有些属性会随时间发生变化(mobile
, avatar_url
, nick_name
, status
),有些一旦记录被创建,其他的就不会改变(id
,gender
,register_channel
).
所以通常在 dim_user
table 中,我们应该使用哪些字段,为什么?
Dim_User 应同时具有可更改和不可更改的字段。在非规范化模型中,最好将一个维度的所有相关属性保存在一个 table 中。
此外,最好在维度 table 中保留有关用户的所有可用信息,因为它们可能用于报告目的。如果报告不需要它们,您可以跳过它们。
如果想保留用户的变更历史,可以考虑实现slowly changing dimensions。否则,您可以在维度属性发生变化时更新它们。它被称为 I 型 SCD。
假设有一个数据仓库包含一个事实 table 和三个维度 table。
事实table:
- fact_orders
维度tables:
- dim_user
- dim_product
- dim_date
这些 table 的所有数据都是从我们的业务系统中提取的。
在业务系统中,用户有很多属性,有些属性会随时间发生变化(mobile
, avatar_url
, nick_name
, status
),有些一旦记录被创建,其他的就不会改变(id
,gender
,register_channel
).
所以通常在 dim_user
table 中,我们应该使用哪些字段,为什么?
Dim_User 应同时具有可更改和不可更改的字段。在非规范化模型中,最好将一个维度的所有相关属性保存在一个 table 中。
此外,最好在维度 table 中保留有关用户的所有可用信息,因为它们可能用于报告目的。如果报告不需要它们,您可以跳过它们。
如果想保留用户的变更历史,可以考虑实现slowly changing dimensions。否则,您可以在维度属性发生变化时更新它们。它被称为 I 型 SCD。