Database design 事实和维度表:一对一关系

Database design 事实和维度表:一对一关系,database-design,data-warehouse,business-intelligence,Database Design,Data Warehouse,Business Intelligence,我正在尝试开发一个合适的BI解决方案,使维度和事实表具有1:1的关系 以以下为例: 事实与用户数据 用户ID 位置ID 职业ID 可以有意义地聚合的一组数字数据 Dim_用户 用户ID 性别 种族渊源 Dim_位置 位置ID 地区 城市 状态 Dim_职业 职业ID 职业名称 在本例中,假设Fact_UserData和Dim_User通过用户ID始终具有1:1的关系 主要让我感到不舒服的是1:1关系——我应该有一个专用的用户维度,还是应该将这些属性合并到事实表中?我对合并犹豫不决,因为根据,退化

我正在尝试开发一个合适的BI解决方案,使维度和事实表具有1:1的关系

以以下为例:

事实与用户数据

用户ID 位置ID 职业ID 可以有意义地聚合的一组数字数据 Dim_用户

用户ID 性别 种族渊源 Dim_位置

位置ID 地区 城市 状态 Dim_职业

职业ID 职业名称 在本例中,假设Fact_UserData和Dim_User通过用户ID始终具有1:1的关系

主要让我感到不舒服的是1:1关系——我应该有一个专用的用户维度,还是应该将这些属性合并到事实表中?我对合并犹豫不决,因为根据,退化维度应该保留给操作控制编号。我还想知道将职业作为一个专用维度是否有意义——从业务的角度来看,按职业分组是至关重要的,这就是我最初将职业作为自己的维度的原因


作为对职业维度问题的概括,处理维度只有两个字段:ID和name的情况的最佳实践方法是什么?把它想象成一个典型的Customers维度,期望它只有Customer ID和Customer Name字段。假设维度有10多个条目,没有任何层次结构。

好吧,考虑到一个人可以更改职业和位置,我也希望该事实表中有一个日期键。如果您将职业和/或位置拉入用户维度,您将得到类型2维度,因此必须跟踪那里的时间变化。
使用带有Key和BusinessKey的dimension没有什么错-随着时间的推移,情况会发生变化,您最终会添加一些东西。

同意-看起来这个事实表只是用户职业和位置的定期快照,周期是永久的,粒度定义为每个用户ID一行。这没有错,但我认为事实上也应该存在DateKey。感谢Damir和@West的输入。我意识到我的示例并不完全反映我的实际业务模型,出于安全原因,我无法明确说明它。具体来说,“位置”和“职业”对于给定的用户来说实际上是固定的——它永远不会改变。事实表或用户维度表中都不会有任何重复的用户。我的模型仍然有效吗?最后一个问题是:既然职业维度中的每个职业条目都是唯一的,那么我是否需要为其指定一个专用维度,还是应该在事实表中将“职业名称”作为属性包含?正如我在帖子中提到的,我确实需要按职业分组;这是双向的。如果是单独维度,则可以选择职业、总和。。。按职业分组,而不必加入用户表,这可能更快,也可能更快,取决于用户表的大小。