我试图开发一个合适的BI解决方案,其中维度表和事实表之间存在1:1的关系。
例如: 事实表_UserData - 用户ID - 位置ID - 职业ID - 一些可以有意义地聚合的数字数据 维度表_User - 用户ID - 性别 - 民族 维度表_位置 - 位置ID - 区 - 市 - 州 维度表_职业 - 职业ID - 职业名称
在这个例子中,假设Fact_UserData和Dim_User将始终通过用户ID保持1:1的关系。
主要让我困惑的是1:1关系 - 我应该有一个专门的用户维度还是将这些属性合并到事实表中?我不愿意合并,因为根据Kimball,退化维度应该保留用于操作控制数字。我也在想是否有必要将职业作为一个专门的维度 - 根据业务的角度,按职业分组非常重要,这就是为什么我最初将其作为自己的维度的原因。
对于职业维度问题的一般化,如何处理维度只有两个字段(ID和名称)的情况会是最佳实践方法?(将其视为典型的客户维度,期望它只有客户ID和客户名称两个字段。)假设该维度有10个以上条目,并且没有任何层次结构。
例如: 事实表_UserData - 用户ID - 位置ID - 职业ID - 一些可以有意义地聚合的数字数据 维度表_User - 用户ID - 性别 - 民族 维度表_位置 - 位置ID - 区 - 市 - 州 维度表_职业 - 职业ID - 职业名称
在这个例子中,假设Fact_UserData和Dim_User将始终通过用户ID保持1:1的关系。
主要让我困惑的是1:1关系 - 我应该有一个专门的用户维度还是将这些属性合并到事实表中?我不愿意合并,因为根据Kimball,退化维度应该保留用于操作控制数字。我也在想是否有必要将职业作为一个专门的维度 - 根据业务的角度,按职业分组非常重要,这就是为什么我最初将其作为自己的维度的原因。
对于职业维度问题的一般化,如何处理维度只有两个字段(ID和名称)的情况会是最佳实践方法?(将其视为典型的客户维度,期望它只有客户ID和客户名称两个字段。)假设该维度有10个以上条目,并且没有任何层次结构。
select occupation, sum(...) from fact_tbl group by occupation
来进行查询,而不必加入user
表--这取决于user
表的大小,可能会更快。 - Damir Sudarevic