我想在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
...
答案 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
允许此列在插入期间由数据库自动填充(并且是唯一的)。