代码之家  ›  专栏  ›  技术社区  ›  Enrique Benito Casado

使用DWH/Dimensional Model beyond中的主键搜索功能

  •  1
  • Enrique Benito Casado  · 技术社区  · 7 年前

    我目前在一个DWH中工作,OLTP数据库提供数据,我注意到从输入层到DWH的核心。

    我们进行以下转换

    • 我们添加一个Pk并在1NF中规范化数据
    • 我们增加了一个历史专栏。

    例如

    Table client:
    
        id_client is the primary key
    
        id_client |client | Date     |Subsidary ..
      -------------------------------------------------
         000001   |vha57  | 19-08-18 | Detutsche Bank
    

    有趣的是,我们不使用主键(客户机ID)来重新运行一个值,事实上我从来没有看到它被使用过。

    如果要搜索行,请使用客户机和日期

         select  colum1,column2 from client where client = 'vha57' and Date = '19-08-18'
    

    我想知道为什么我们必须添加一个主键,如果他们没有搜索用途。 除了定位特定行之外,PK还有其他用途吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   jmng    7 年前

    一个 primary key 是一种数据建模概念,使您能够唯一地标识表中的特定行,例如,将“userId”列设置为“users”表的主键可以保证只有一行/用户的userId=X。

    实际上,在大多数数据库系统中,主键是 referential integrity 为设置为键的列强制使用唯一值的约束,从而确保键列的每个值唯一标识该表的一个特定行。

    因此,在这种情况下,主键似乎完全用于其目的:保证每个用户都有一个唯一的id,从而可以被它识别。

    此外,主键仅“对搜索有用”,因为在大多数数据库系统中,它是通过使用(唯一的)来实现的 index 在设置为主键的列上。无论何时在where子句中使用该列或在联接中使用该列,索引都用于定位与查询匹配的特定行,而不是读取整个表。这使得搜索/联接比使用未编制索引的列更快。

    编辑 :如果您只考虑“有用的搜索”场景,那么定义主键(例如在维度上)的好处是,它的索引(在大多数RDBMS中自动创建)将用于优化和加速事实表和维度表之间的连接(就像在关系模型中一样)。即使在查询中没有显式地使用它,主键的索引在与其他表联接时仍然可以提高搜索/查询的速度。

    推荐文章