2011-12-07 9 views
6

Quiero manejar una dimensión de fecha en un datawarehouse de MySQL. (Soy un novato en el mundo de DW)Utilizando un campo DATE como clave principal de una dimensión de fecha con MySQL

Hice algunas búsquedas con google y vi un montón de estructuras de tabla (la mayoría de) dimensión de fecha donde la clave principal es un simple UNSIGNED INTEGER.

¿Por qué no utilizar un campo DATE como clave principal ya que con MySQL es de 3 Bytes VS 4 Bytes para 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 
... 
+2

¿No espera tener múltiples registros para la misma fecha? – Mat

+1

No, esperaré una gran cantidad de registros para la misma fecha en mi tabla de hechos, no en la tabla de dimensiones. – nemenems

+0

Kimball dice que cada dimensión pk debe ser un sustituto. –

Respuesta

6

Si usted tiene una tabla con una columna que es de date tipo y donde no hay dos filas tendrá siempre la misma fecha, entonces seguramente puede use esta columna como PRIMARY KEY.

Ve un montón de ejemplos donde la clave principal es simple UNSIGNED INTEGER porque hay muchos casos en los que no existe un candidato perfecto para la clave principal. El AUTO_INCREMENT permite que esta columna se llene automáticamente por la base de datos (y sea única) durante las inserciones.

14

La dimensión de fecha es algo especial, ya que se prefiere la fecha (2011-12-07) o el entero relacionado con la fecha (20111207) para una clave principal. Esto permite una buena partición (por fecha) de tablas de hechos.

Para otro tipo de dimensiones, se recomiendan llaves sustitutas (enteras).

como una plantilla, cada dimensión por lo general tiene entradas para unknown, not entered, error, ... que a menudo se corresponden con las teclas de 0, -1, -2, ...

Debido a esto, es más común encontrar fecha número entero con formato (20111207) como una clave principal en lugar de la fecha - es un poco complicado representar unknown, not entered, error, ... con la clave de tipo de fecha.

Cuestiones relacionadas