数据仓库设计——多查找值

Data warehouse design - Multiple lookup values

寻找有关数据仓库架构设计的输入。场景如下:

我有一个操作 Table 和当前根据 UserId 加入的用户 Table 以获取有关执行操作的用户的详细信息。

Action Table:
    UserId   Action
    123      Test001

User Table:
    UserId    UserName
    123       Adam

现在,我们必须将用户迁移到新的用户管理系统 (UMS),其工作原理如下:

  1. 现有用户将迁移到 UMS 并分配新的 UserId(我们称其为现代 UserId,现有 UserId 为旧版 UserId)。因此,新操作的新记录将携带新的 UserId。
  2. 在 UMS 中创建的新用户将只有 Modern UserId,而 Legacy UserId 将为 运行。
  3. 迁移后的用户将同时拥有旧版 UserId 和现代 UserId。

现在,当我们进行报告时,我们必须公开历史和新的操作数据。想知道理想的架构设计应该是什么,以便我们可以报告历史和新操作并将它们映射到正确的用户。

平台:SQL Server 2016,分析服务

如果您需要更多详细信息,请告诉我。

您没有向我们提供任何有关如何完成此操作的详细信息,因此 sql-server 标记在这里对我们没有真正的帮助。这更像是一个建模问题。

当您谈到列的新 ID 时,在创建所述键的过程中必须采用某种方式来确保完整性,该过程将在某种程度上规定您必须提供解决方案的方法。

用户 table 看起来是一个 table 的唯一值并且创建 'Modern Key' 的地方,如果你可以编辑这个 table,你应在此处添加 'legacy key'。这将成为您的映射 table,映射 table 不必是单独的对象。

同意前面的回答。当您的上游团队执行到 UMS 的迁移时,他们应该以某种方式保留旧用户 ID 和现代用户 ID 之间的映射。在仓库的下游,我建议您将两个 ID 都保留在您的用户维度 table 中,但在此 table 中生成一个代理键,它将作为主键(它可以只是一个增量整数)。这样,无论用户是现代用户还是传统用户,您都可以在 Action 事实中将代理键用作外键 table。

这是我为您的 table 提出的数据模型设计建议:

DIM_USER
- USER_KEY (pk)
- USER_ID
- USER_ID_LEGACY
- USERNAME
- ....

DIM_ACTION
- ACTION_KEY (pk)
- ACTION
- ....

FACT_ACTION
- USER_KEY
- ACTION_KEY
- ....