02 · Modelado

Esquema en estrella

Una tabla de hechos en el centro, sus dimensiones alrededor, y una sola línea directa entre cada una.

Es la forma más común de organizar un data warehouse. Hay una tabla central con los eventos que pasaron — ventas, reproducciones, partidas jugadas — y a su alrededor, tablas más chicas que describen quién, qué y cuándo pasó ese evento. A la tabla central se le llama tabla de hechos y a las de alrededor, dimensiones.

La regla de oro: cada dimensión se conecta directo a la tabla de hechos, sin pasar por otra tabla intermedia. Por eso el dibujo termina pareciendo una estrella.

fct_reproduc- ciones dim_fecha dim_usuario dim_cancion
Ejemplo: una app de música registra cada reproducción. Cada flecha es una clave foránea directa hacia la dimensión — un solo salto.
hechos dimensión
Ventaja clave
consultas rápidas y simples — solo hay que unir el hecho con cada dimensión, nunca más de un salto.
Cuándo conviene
cuando las dimensiones no son enormes ni cambian su estructura seguido. Es el punto de partida recomendado casi siempre.

Anatomía: hechos vs. dimensiones, con datos reales

Imaginemos que armamos, a mano, una libreta para anotar cada vez que alguien escucha una canción en la app. Por cada escucha anotamos cuatro cosas: quién escuchó, qué canción escuchó, qué día fue, y cuántos segundos duró. Esa libreta, convertida en tabla, es fct_reproducciones — la tabla de hechos.

Ahora, escribir "Valentina" y "Cielo Abierto" letra por letra en cada línea sería repetitivo. Por eso, en vez del nombre completo, a cada persona y a cada canción se les da un código corto — igual que un código de barras identifica un producto sin escribir su nombre entero. Así se ve la libreta real:

fct_reproducciones — una fila por cada escucha
id_reproduccionid_usuarioid_cancionfechasegundos_escuchados
REP-1U-1S-102026-08-20210
REP-2U-1S-112026-08-20180
REP-3U-2S-102026-08-21205
REP-4U-2S-122026-08-21150
id_reproduccion
el número de esa escucha puntual — como el número de ticket de una fila.
id_usuario
el código de quién escuchó. No dice el nombre — para eso está dim_usuario, más abajo.
id_cancion
el código de qué canción fue. Su significado está en dim_cancion, más abajo.
segundos_escuchados
el único número que de verdad interesa sumar o promediar después — esa es la medida.

Un código como U-1 no dice nada por sí solo. Para saber quién es realmente, hace falta el "diccionario" de esos códigos — ahí es donde entran las dimensiones. dim_usuario traduce cada id_usuario a una persona real:

dim_usuario — el diccionario de "quién"
id_usuarionombrepaisplan
U-1ValentinaArgentinaPremium
U-2MarcoMéxicoGratis

Y dim_cancion traduce cada id_cancion a una canción real:

dim_cancion — el diccionario de "qué"
id_canciontituloartistaalbumduracion_seg
S-10Cielo AbiertoLos ÁlamosHorizontes215
S-11Ritmo NuevoDJ NovaPulso190
S-12Bajo la LunaLos ÁlamosHorizontes160

Esa coincidencia de códigos — id_usuario e id_cancion aparecen tanto en la libreta de hechos como en su tabla dimensión correspondiente — es literalmente lo que dibuja la estrella: el hecho en el centro, conectado a cada diccionario alrededor.

Cómo se arma, paso a paso

  1. Definir el grano La frase que describe una fila exacta de la tabla de hechos: "una reproducción completa de una canción, por un usuario, en un momento dado". Todo lo demás sale de esta frase.
  2. Elegir las medidas Los números que interesa sumar o promediar más adelante. Aquí: segundos_escuchados. También podrías agregar "cantidad de reproducciones" simplemente contando filas.
  3. Elegir las dimensiones El quién, qué y cuándo del hecho: dim_usuario (quién escuchó), dim_cancion (qué se escuchó), la fecha (cuándo).
  4. Conectar con claves Cada dimensión tiene su propio identificador (id_usuario, id_cancion), y ese mismo identificador aparece como columna en la tabla de hechos para poder unirlas.

Ver el resultado: uniendo todo

Esta es la razón de ser del esquema en estrella: cuando unes (JOIN) la tabla de hechos con sus dimensiones, obtienes una respuesta legible en un solo paso por dimensión. Por ejemplo, "¿qué escuchó cada usuario y cuándo?":

Resultado de unir fct_reproducciones + dim_usuario + dim_cancion
usuariocancionartistafechasegundos_escuchados
ValentinaCielo AbiertoLos Álamos2026-08-20210
ValentinaRitmo NuevoDJ Nova2026-08-20180
MarcoCielo AbiertoLos Álamos2026-08-21205
MarcoBajo la LunaLos Álamos2026-08-21150

Un solo join por dimensión — nada de saltar por tablas intermedias. Esa simpleza es la ventaja principal de la estrella.

El mismo patrón, en otros mundos

Debajo de la superficie, "tabla de hechos + dimensiones" es el mismo molde sin importar el rubro. Compara estos cuatro casos:

🎮Videojuegos
Hecho
fct_partidas_jugadas
Dimensiones
dim_jugador, dim_mapa, dim_personaje, dim_fecha
🍳Restaurante
Hecho
fct_pedidos
Dimensiones
dim_plato, dim_mesa, dim_mesero, dim_fecha
🎸Conciertos
Hecho
fct_entradas_vendidas
Dimensiones
dim_banda, dim_venue, dim_fecha, dim_tipo_entrada
🎵Streaming
Hecho
fct_reproducciones
Dimensiones
dim_cancion, dim_usuario, dim_dispositivo, dim_fecha

Para seguir viendo