Использование поля DATE в качестве первичного ключа измерения даты с MySQL

Я хочу обрабатывать измерение даты в хранилище данных MySQL. (Я новичок в мире DW)

Я сделал несколько поисков в Google и увидел множество табличных структур (большинство) измерения даты, где первичный ключ представляет собой простой UNSIGNED INTEGER.

Почему бы не использовать поле DATE в качестве первичного ключа, поскольку в MySQL это 3 байта VS 4 байта для INTEGER?

Ex:

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

person nemenems    schedule 07.12.2011    source источник
comment
Вы не ожидаете, что у вас будет несколько записей на одну и ту же дату?   -  person Mat    schedule 07.12.2011
comment
Нет, я ожидаю много записей для одной и той же даты в моей таблице фактов, а не в таблице измерений.   -  person nemenems    schedule 07.12.2011
comment
Кимбалл говорит, что каждое измерение pk должно быть суррогатным.   -  person Neil McGuigan    schedule 19.03.2013


Ответы (2)


Если у вас есть таблица со столбцом типа date, в котором никакие две строки не имеют одинаковой даты, вы, безусловно, можете использовать этот столбец как PRIMARY KEY.

Вы видите много примеров, где первичный ключ представляет собой простую UNSIGNED INTEGER, потому что во многих случаях нет идеального кандидата на первичный ключ. AUTO_INCREMENT позволяет базе данных автоматически заполнять этот столбец (и быть уникальным) во время вставок.

person ypercubeᵀᴹ    schedule 07.12.2011

Измерение даты является особенным — на самом деле предпочтительнее иметь дату (2011-12-07) или связанное с датой целое число (20111207) для первичного ключа. Это позволяет хорошо разбивать (по дате) таблицы фактов.

Для других типов измерений рекомендуются суррогатные (целочисленные) ключи.

В качестве шаблона каждое измерение обычно имеет записи для unknown, not entered, error, ..., которые часто сопоставляются с ключами 0, -1, -2, ....

Из-за этого чаще встречается дата в целочисленном формате (20111207) в качестве первичного ключа, а не дата - немного запутанно представлять unknown, not entered, error, ... с ключом типа даты.

person Damir Sudarevic    schedule 07.12.2011