使用DATE字段作为MySQL日期维度的主键

时间:2011-12-07 13:01:26

标签: mysql date schema data-warehouse dimension

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

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

为什么不使用DATE字段作为主键,因为对于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
...

2 个答案:

答案 0 :(得分:20)

日期维度有点特别 - 主键的日期(2011-12-07)或日期相关的整数(20111207)实际上是首选。这允许事实表的良好分区(按日期)。

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

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

由于这个原因,更常见的是将整数格式的日期(20111207)作为主键而不是日期 - 使用日期类型键表示unknown, not entered, error, ...有点麻烦。

答案 1 :(得分:10)

如果您的表格的列类型为date,并且没有两行的日期相同,那么您肯定可以将此列用作PRIMARY KEY

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