在 DWH / 维度模型中使用主键来搜索功能

Use of primary key in the DWH / Dimensional Model beyond to search functionality

我目前在 DWH 工作,OLTP 数据库在其中传送数据,我注意到从输入层到 DWH 的核心。

我们进行如下变换

例如

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 是否还有其他用途?

A primary key 是一种数据建模概念,使您能够唯一标识 table 中的特定行,例如将 "userId" 列设置为 "users" table 上的主键可保证只有一个 row/user 的 userId = X.

实际上,在大多数数据库系统中,主键是一个 referential integrity 约束,它为设置为键的列强制执行唯一值,从而保证键列的每个值都是唯一的标识 table.

的特定行

所以,在那种情况下,似乎主键正是用于它的目的:保证每个用户都有一个唯一的id,因此可以被它识别。

此外,主键只有 "useful for search",因为在大多数数据库系统中,它是通过在设置为主键的列上使用(唯一的)index 来实现的。每当您在 where 子句中使用该列或在连接中使用该列时,索引都会用于定位与您的查询匹配的特定行,而不是读取整个 table。这使您的 search/join 比使用未编入索引的列更快。

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