03 · Modelado

Esquema en copo de nieve

La misma estrella, pero a una dimensión se le quita el atajo directo.

Es el mismo dibujo de la estrella, pero a una o más dimensiones se les quita el atajo: en vez de tener toda su información en una sola tabla, esa información se reparte en varias tablas más chicas y ordenadas (normalizadas). Para llegar al dato completo hay que dar un salto extra.

Siguiendo el ejemplo de la app de música: dim_cancion podría guardar directamente el nombre del álbum y del artista repetido en cada fila. En un copo de nieve, esa información se separa: dim_cancion apunta a dim_album, y dim_album apunta a dim_artista. Así el nombre del artista se guarda una sola vez, no repetido en cada canción.

fct_reproduc- ciones dim_usuario dim_fecha dim_cancion dim_album dim_artista
dim_cancion ya no tiene todo: hay que saltar a dim_album y de ahí a dim_artista (bordes punteados) para llegar al dato completo. Eso son más joins que en la estrella.
hechos dimensión
Ventaja clave
menos datos repetidos y más fácil de mantener cuando una dimensión es grande o cambia seguido.
Costo
las consultas necesitan más joins (más saltos entre tablas), lo que las hace algo más lentas y más difíciles de escribir.

El problema que resuelve: datos repetidos

Seguimos con la misma libreta de canciones de la página anterior: S-10, S-11 y S-12 son los mismos códigos de siempre. Ahora imaginemos que a dim_cancion le agregamos, en las mismas filas, de dónde es el artista y de qué año es el álbum. Así quedaría:

Antes — dim_cancion denormalizada (esquema estrella)
id_canciontituloartistapais_artistaalbumanio_album
S-10Cielo AbiertoLos ÁlamosArgentinaHorizontes2023
S-11Ritmo NuevoDJ NovaEspañaPulso2024
S-12Bajo la LunaLos ÁlamosArgentinaHorizontes2023
Observa las filas S-10 y S-12: "Los Álamos", "Argentina", "Horizontes" y "2023" están escritos dos veces, palabra por palabra. Si mañana la banda se muda de país, hay que acordarse de corregir todas las filas donde aparece — y es fácil olvidar alguna. Ese es el problema que el copo de nieve evita.

El copo de nieve separa esa información repetida en sus propias tablas, cada dato guardado una sola vez:

Después — dim_cancion normalizada
id_canciontituloid_album
S-10Cielo AbiertoALB-1
S-11Ritmo NuevoALB-2
S-12Bajo la LunaALB-1
dim_album
id_albumtitulo_albumanioid_artista
ALB-1Horizontes2023ART-1
ALB-2Pulso2024ART-2
dim_artista
id_artistanombrepais
ART-1Los ÁlamosArgentina
ART-2DJ NovaEspaña

Ahora "Argentina" existe en una sola fila (ART-1). Cambiar el país de la banda es actualizar un solo valor, no buscar todas las canciones que la mencionan.

Estrella vs. copo de nieve, cara a cara

EstrellaCopo de nieve
Tablas por dimensión12 o más, encadenadas
Repetición de datosAlta — el mismo artista se repite en cada canciónBaja — cada dato se guarda una sola vez
Joins para un reporte simple1 por dimensión2 o más por dimensión normalizada
Si cambia un dato (ej. país del artista)Hay que actualizar todas las filas repetidasSe actualiza una sola fila
Velocidad típica de consultaMás rápida — menos saltosAlgo más lenta — más saltos
Cuándo convieneDimensiones chicas; prioridad en velocidad y simplicidadDimensiones grandes o que cambian seguido; prioridad en evitar duplicación

La misma normalización, en otros mundos

🎮Videojuegos
Se normaliza
dim_personaje → dim_faccion (la facción ya no se repite en cada personaje)
🍳Restaurante
Se normaliza
dim_plato → dim_categoria_plato (entrante, principal, postre, en su propia tabla)
🎸Conciertos
Se normaliza
dim_banda → dim_genero_musical (el género deja de repetirse por cada banda)
🎵Streaming
Se normaliza
dim_cancion → dim_album → dim_artista (el ejemplo del diagrama de arriba)

Para seguir viendo