13

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

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

为什么不使用DATE字段作为主键,因为对于 MySQL,它是 3 字节 VS 4 字节INTEGER

前任:

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
...
4

2 回答 2

24

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

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

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

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

于 2011-12-07T14:02:36.900 回答
12

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

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

于 2011-12-07T13:07:54.413 回答