【问题标题】:Using a DATE field as primary key of a date dimension with MySQL在 MySQL 中使用 DATE 字段作为日期维度的主键
【发布时间】:2012-01-14 23:42:34
【问题描述】:

我想处理 MySQL 数据仓库中的日期维度。 (我是DW世界的新手)

我用 google 进行了一些搜索,看到了很多表结构(大部分)日期维度,其中主键是一个简单的 UNSIGNED INTEGER

为什么不使用 DATE 字段作为主键,因为在 MySQL 中,INTEGER 是 3 字节 VS 4 字节?

例如:

CREATE TABLE dimDate
id INTEGER UNSIGNED NOT NULL PRIMARY AUTOI_NCREMENT,
date DATE NOT NULL,
dayOfWeek
...

VS

CREATE TABLE dimDate
date DATE NOT NULL PRIMARY,
dayOfWeek
...

【问题讨论】:

  • 您不希望在同一日期有多个记录?
  • 不,我希望我的事实表而不是维度表中有很多相同日期的记录。
  • Kimball 说每个维度 pk 都应该是代理项。

标签: mysql date schema data-warehouse dimension


【解决方案1】:

如果您有一个表的列是date 类型,并且没有两行具有相同的日期,那么您当然可以将此列用作PRIMARY KEY

您会看到很多主键是简单 UNSIGNED INTEGER 的示例,因为在很多情况下,主键都没有完美的候选者。 AUTO_INCREMENT 允许该列在插入期间由数据库自动填充(并且是唯一的)。

【讨论】:

    【解决方案2】:

    日期维度 是一种特殊的 - 实际上首选具有日期 (2011-12-07) 或与日期相关的整数 (20111207) 作为主键。这允许对事实表进行很好的分区(按日期)。

    对于其他类型的维度,建议使用代理(整数)键。

    作为模板,每个维度通常都有 unknown, not entered, error, ... 的条目,这些条目通常与键 0, -1, -2, ... 匹配

    因此,将整数格式的日期 (20111207) 作为主键而不是日期更为常见——用日期类型的键表示 unknown, not entered, error, ... 有点混乱。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多