Использование поля DATE в качестве первичного ключа измерения даты с MySQL - PullRequest
9 голосов
/ 07 декабря 2011

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

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

Почему бы не использовать поле DATE в качестве первичного ключа, поскольку в MySQL это 3 байта против 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
...

Ответы [ 2 ]

21 голосов
/ 07 декабря 2011

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

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

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

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

10 голосов
/ 07 декабря 2011

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

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

...