Cargando...
En el mundo del Business Intelligence (BI) es muy importante tener un datawarehouse para tener toda la información obtenida de distintas fuentes centralizada en una misma base de datos. Además, esta información debe estar normalizada y por esa razón escribo este artículo sobre los modelos de estrella, pilar fundamental y no único de cualquier datawarehouse.
Antes de empezar a definir el modelo de estrella me voy a permitir el lujo de hablar muy brevemente sobre Kimball e Inmon y que proponen cada uno de ellos, además, luego explicaré el modelo de estrella y su rival, el modelo en copo de nieve.
Enlace: https://blog.bi-geek.com/arquitectura-el-enfoque-de-ralph-kimball/
Para diseñar un datawarehouse se tiene que conocer muy bien el negocio pero ¿qué pasa si no se conoce o se trabaja en una consultora? ¿Tenemos que invertir muchísimo tiempo en conocer todos los procesos de negocio, entenderlos, dominarlos para después diseñar el datawarehouse? La respuesta es NO TIENE PORQUE.
La filosofía que propone Kimball es la de “Bottom-up”, filosofía que también se sigue en el desarrollo de software y consiste en empezar por tareas sencillas y conforme se va avanzando en el proyecto este va evolucionando.
Si pensamos un poco, esta filosofía empieza de unas necesidades básicas creando un primer modelo que solo dará respuesta a pocos usuarios de la empresa, por lo que el datawarehouse en este momento es equivalente a un datamart. Cuando se tiene este datamart funcionando perfectamente, se sigue desarrollando otros modelos que cubran las necesidades de otros departamentos y ahora sí podríamos estar hablando de un datawarehouse.
La clave de tener en un mismo datawarehouse todos los modelos es que las dimensiones se comparten entre modelos.
La estructura de este datawarehouse podría ser grandes tablas desnormalizadas con toda la información, modelos de estrella o modelos de copo de nieve.
Desde mi punto de vista el modelo de estrella es el mejor por mantenibilidad, reutilización de las dimensiones y menor cantidad de campos en las tablas de hechos.
Enlace: https://blog.bi-geek.com/arquitectura-enfoque-de-william-h-inmon/
Inmon propone tener en un datawarehouse distintos datamarts, hablando de forma práctica esto es que por cada modelo de datos o tabla de hechos tenga sus propias dimensiones pudiendo tener por ejemplo la dimensión CLIENTE repetida en distintos datamarts. Cada departamento dentro de la empresa tendría su propio datamart con sus datos.
Inmon exige además tener una estructura de datos normalizada hasta la tercera forma normal 3FN (la mayoría de aplicaciones web están normalizadas en esta forma y son fundamentos de base de datos).
3FN: https://es.wikipedia.org/wiki/Tercera_forma_normal
La estructura que exige Inmon es la de copo de nieve (no la de estrella) que penaliza el rendimiento por hacer uso de una gran cantidad de joins. Mi pregunta es ¿Si exige tener un modelo de copo de nieve, porque no hacer consultas directamente a la base de datos? El rendimiento sería muy parecido.
Desde mi experiencia, en Planeta Huerto cuando empecé a desarrollar el datawarehouse no conocía el negocio y paralelamente a la construcción del datawarehouse mis compañeros iban solicitando datos e informes de una base de datos que no conocía. Gracias a estos informes que día a día sacaba y con ayuda de los desarrolladores que me explicaban la estructura de la BBDD iba entendiendo como esta estaba estructurada.
Seguí la filosofía de Kimball y trabajé con una estrategia “Bottom-up”, conforme iban entrando requerimientos iba añadiendo al datawarehouse nuevas métricas y campos a las dimensiones. También iba generando nuevos modelos consiguiendo tener modelos que satisfacían las necesidades a los departamentos:
Desde mi punto de vista, usar kimball es trabajar de forma ágil, en cualquier momento puede cambiar un requerimiento. Si hubiera usado Inmon creo que después de 8 meses aún seguiría haciendo un análisis o directamente en el paro.
Desde mi punto de vista el modelo de estrella es el más práctico a la hora de diseñar un datawarehouse, es el que uso yo en mi día a día por lo siguiente:
En esta imagen se aprecia como la dimensión Vehículo si se usara el copo de nieve los campos modelo y categoría serían tablas independientes haciendo bastante más complejo hacer una consulta.
En un mundo ideal este modelo sería el ideal pero no lo es, diseñando un modelo en copo de nieve conseguiríamos tener un datawarehouse normalizado en la 3FN. Así es como funcionan todas las bases de datos transaccionales como los ecommerce etc… pero no creo que para un sistema analítico esto sea necesario por las siguientes razones.
Como se ve en esta imagen, está todo normalizado en la 3FN pero ¿es necesario?
Por ejemplo, en la dimensión cliente el sexo y la franjaEdad las incluiría dentro de cliente aunque estos valores se repitan muchas veces, nos ahorramos dos joins
En la dimensión SubCategoría añadiría los datos de Categoría aunque se repita el nombre de categoría.
Aplicando estas 3 recomendaciones ya se hubiera ahorrado 3 joins para hacer una consulta sobre estas dimensiones.
No obsesionarse con hacer un super análisis, hacer un pequeño análisis inicial y empezar con un pequeño datamart, este ya irá evolucionando conforme vayan entrando necesidades de negocio y con cada nuevo informe que solicitan (consultando la BBDD transaccional) ir diseñando el nuevo modelo de datos.
No usar super tablas desnormalizadas, eso es pan para hoy y hambre para mañana. Con el tiempo van aumentando la cantidad de supertablas y mantener esas tablas como por ejemplo añadir un campo a una dimensión que se encuentran en 5 tablas es hacer 5 modificaciones.
No obsesionarse con tener un modelo en copo de nieve muy normalizado, perjudicará las consultas cuando se hagan joins.
Utilizar un modelo de estrella aplicando el sentido común, por ejemplo, si una dimensión tiene una cantidad de campos muy elevada se puede usar un híbrido entre el modelo de estrella y el copo de nieve.
Hay dimensiones como la dimensión producto que contienen datos del proveedor, podemos decidir incluir todos los datos del proveedor en la misma tabla de producto o desacoplarla de producto teniendo así una nueva dimensión proveedor. (Esto es lo que he hecho yo).
Aplicar el sentido común aunque este sea diferente para cada uno.
Puede ver otros posts relacionados:
Virgen del pilar nº4, ático H
03330 Crevillente (Alicante)
Francisco Rodriguez Alfaro