代码之家  ›  专栏  ›  技术社区  ›  WhatsUp

数据仓库设计-多个查找值

  •  0
  • WhatsUp  · 技术社区  · 6 年前

    寻找数据仓库模式设计的输入。以下是场景:

    我有一个Action表和User表,它们当前基于UserId进行连接,以获取执行操作的用户的详细信息。

    Action Table:
        UserId   Action
        123      Test001
    
    User Table:
        UserId    UserName
        123       Adam
    

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

    1. 现有用户将迁移到UMS,并分配新的用户ID(我们将其称为现代用户ID,现有用户ID称为旧用户ID)。因此,用于新操作的新记录将携带新的UserId。
    2. 在UMS中创建的新用户将仅具有现代用户ID,并且将运行旧用户ID。
    3. 迁移的用户将同时具有旧用户ID和现代用户ID。

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

    平台:SQL Server 2016,Analysis Services

    如果你需要更多的细节,请告诉我。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Random_User    6 年前

    您尚未向我们提供有关如何进行此操作的详细信息,因此 sql-server tag在这方面帮不了我们什么忙。这更像是一个建模问题。

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

    用户表看起来是一个包含唯一值的表,在其中创建了“现代键”,如果可以编辑此表,则应在此处添加“传统键”。这将成为映射表,映射表不必是单独的对象。

        2
  •  0
  •   Alexis.Rolland user2915097    6 年前

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

    以下是我对您的表的数据模型设计的建议:

    DIM_USER
    - USER_KEY (pk)
    - USER_ID
    - USER_ID_LEGACY
    - USERNAME
    - ....
    
    DIM_ACTION
    - ACTION_KEY (pk)
    - ACTION
    - ....
    
    FACT_ACTION
    - USER_KEY
    - ACTION_KEY
    - ....
    
    推荐文章