【问题标题】:Use of primary key in the DWH / Dimensional Model beyond to search functionality使用 DWH / Dimensional Model 中的主键来搜索功能
【发布时间】:2019-01-02 11:22:08
【问题描述】:

我目前在 OLTP 数据库提供数据的 DWH 中工作,我注意到从输入层到 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 还有其他用途吗?

【问题讨论】:

    标签: data-modeling data-warehouse dimensional-modeling


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 嗨@derelict,就像我说的那样,我已经在那个DWH工作了2年,我从来没有看到PKbeeing用于搜索,绝对没有人。我担心Primary背后的理论和那是自动索引的,搜索它是更快的搜索,但事实并非如此。我发现的独特用途是保持事实表和维度表之间的参考完整性。
    • @Enrique 我添加了一个可以解决您问题的编辑。我的观点是,主键提供了更多仅用于搜索/查询的功能,尽管它们在与其他表连接时确实提高了查询速度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 2016-03-24
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多