我的问题是关于数据仓库中 fact_table 的建模。例如,我们有订阅不同主题的用户,我们想跟踪他们何时开始订阅。每个用户属于特定部门。并且用户可以更改他们的部门。事实表可以有两种设计:
+----------+------------------+-----------------+---------------+------------+
| user_key | subject_key | department_key | start_Date | end_date |
+----------+------------------+-----------------+---------------+------------+
| 1 | 10 | 123 | 2017-09-10 | 2017-09-25 |
| 2 | 11 | 90 | 2017-09-20 | 9999-12-29 |
+----------+------------------+-----------------+---------------+------------+
这意味着用户在 2017-09-10 订阅了主题 10,并在 2017-09-25 取消订阅
另一种设计是从设计中删除department_key。
+----------+------------------+---------------+------------+
| user_key | department_key | start_Date | end_date |
+----------+------------------+---------------+------------+
| 1 | 123 | 2017-09-10 | 2017-09-25 |
| 2 | 90 | 2017-09-20 | 9999-12-29 |
+----------+------------------+---------------+------------+
聚合表是这样的:
+---------+-----------+---------------+------------------+
| user_id | user_name | subject_name | department_anem |
+---------+-----------+---------------+------------------+
| 1 | john | politics | sales |
| 2 | Mark | sport | marketing |
+---------+-----------+---------------+------------------+
问题是,部门可以为用户改变。我们希望用户的当前部门在聚合中,问题是我应该在事实表中包含department_key并在每次用户更改其部门时更新它还是必须在聚合中处理逻辑?除了主题键之外没有其他维度键的事实表是“真的”事实表吗?
谢谢