Documentos de Académico
Documentos de Profesional
Documentos de Cultura
datalytics.com
Mejores prácticas SQL 02
ÍNDICE
Introducción - ¿Qué es el modelado de datos? 03
Conclusiones 22
Mejores prácticas SQL 03
Introducción
¿Qué es el modelado de datos?
En este ebook les traemos las Mejores Prácticas en modelado de datos que usamos en Datalytics. El
tema genera mucho interés en la comunidad de datos porque no es algo que esté del todo estandarizado y,
en general, no se enseña en las universidades/cursos.
A continuación, van a encontrar conceptos teóricos que les van a ayudar mucho, pero es importante que
sepan que el modelado de datos es algo que se aprende haciendo. Por lo tanto, luego de leer este conteni-
do, esperamos que pongan manos a la obra.
Modelar datos es tomar una realidad y representarla a partir de un criterio. El mismo concepto se
puede modelar de distintas formas y en esa interpretación se juega nuestra subjetividad.
Este proceso implica conciliar muchas diferencias. (Sirve para los datos, sirve para la vida. )
El modelado no tiene que ver con la tecnología, sino con la lógica. Si nuestro modelo lógico tiene
sentido, el físico también lo tendrá. Sí, por el contrario, el modelo lógico carece de criterio, el físico no
va a servir para nada.
Trabajamos con datos para lograr que las personas tomen decisiones a partir de ellos.
Los conceptos que vamos a ver son sencillos de entender, sin embargo, se aplican a problemas que
pueden ser muy complejos.
Construir una única versión de la realidad es la problemática más difícil que nos va a tocar enfrentar.
Por eso, lo principal es entender cuál es el objetivo de lo que estamos modelando.
Lo primero que tenemos que preguntarnos es: ¿cómo vamos a usar los datos? (¿para almacenarlos?
¿para analizarlos? ¿para extraerlos? Etc. Etc.) Una vez respondida esta pregunta podemos comenzar.
Mejores prácticas SQL 04
Conceptos básicos I
OLTP vs. OLAP
Los sistemas transaccionales (OLTP) son para ALMACENAR los datos y los analíticos (OLAP) son para
ANALIZARLOS.
OLTP
La prioridad es poder insertar rápido los registros. Por ejemplo, los datos que recibe la caja registrado-
ra de un supermercado, ya que cualquier demora en este proceso generaría largas filas (y mucho mal
humor ).
Estos modelos almacenan rápido, por eso están orientados a la normalización y evitan que se
dupliquen los datos. En ellos las operaciones más comunes son de INSERT, UPDATE y DELETE, por
eso se necesitan tablas que sigan los estándares de normalización para que la ejecución sea correc-
ta.
Las consultas son a nivel registro y determinan quién hizo qué. (Ejemplo: ¿Esta transacción ocurrió?
¿es válida o es falsa?)
Los sistemas más comunes que necesiten una operación de los datos rápida en cuanto a registro,
actualización y borrado son TRANSACCIONALES y están modelados de esta manera. Por ejemplo:
los sistemas ERP, los CRM, los cajeros automáticos, etc.
OLAP
Está orientado a la LECTURA de los datos, la idea es obtenerlos de manera rápida para después poder
hacer algo con ellos (uso frecuente de sentencia SELECT ).
No importa de dónde vengan los datos, lo importante es nuestro objetivo, ¿PARA QUÉ los modela-
mos?, por eso está orientado a temas. Recuerden que no se modela por sistema origen, en un
modelo OLAP pueden integrar diferentes fuentes para tener una visión general de, por ejemplo, el
cliente.
La estructura está desnormalizada (sí, algo que en muchas carreras de tecnología se considera una
aberración , pero es lo que hay que hacer para que la lectura sea rápida ).
Lo que importa es registrar cómo varían los datos a lo largo del tiempo. Por ejemplo: cómo fue el
consumo de luz en determinado mes.
¡No vale hacer DELETE! La info no se modifica ni se elimina ya que, si lo hacemos, vamos a cambiar la
realidad que modelamos. Las modificaciones no son gratis en OLAP, mucha atención a eso.
Mejores prácticas SQL 05
Integración &
consolidación
OLTP OLAP
ORIENTADO A: ORIENTADO A:
. Más transacciones . Grandes volúmenes de datos
. Almacenamiento rápido . Operaciones de lectura principalmente
. Normalización . Desnormalización
. Consultas a nivel registro . Consultas de agregación
. ¿Quién hizo qué? . ¿Cuántas personas hicieron qué en
este período de tiempo?
Mejores prácticas SQL 06
Conceptos básicos II
Tablas de hechos y dimensiones
En este apartado vamos a ver qué es el MODELADO DIMENSIONAL, cómo se compone y por qué es tan
importante.
Es un tipo de sistema OLAP que busca responder consultas en las que lo que importa es analizar algo
(¿cómo se distribuyen las ventas?, ¿por qué bajaron?, ¿por qué subieron?, etc.)
Sirve para analizar los datos a escala en volumen. Recuerden que la única forma de escalar es con
orden y con un buen modelo de datos que permita hacer las cosas más fáciles.
Tiene que ser rápido y fácil de interpretar (para complicar las cosas ya habrá tiempo ). Recuerden
que la performance es un factor fundamental.
Si hacen un buen modelo lógico, el físico va a ser bueno. En cambio, si el modelo lógico es malo,
no habrá forma de rescatarlo , salvo con más hardware, algo que hace que las cosas no escalen
lo suficiente.
HECHOS
Son las cosas que pasaron que nos interesa modelar (ventas, stock, reclamos, etc.)
DIMENSIONES
Son las características de los hechos (quién, qué, cuándo, dónde, cómo, por qué).
A veces, tienen jerarquías que pueden ser, por ejemplo, de tiempo (día, mes año), de familia de
productos (tipo, marca, modelo), de segmentación de clientes, etc.
Modelo dimensional
hechos y dimensiones
FECHA PRODUCTO
Tabla de dimensiones
Mes TipoPaquete
Dia Categoria
Descripcion ID FECHA
IndicadorFestivo
ID PRODUCTO
ID SUCURSAL
ID PROMOCION
SUCURSAL PROMOCIÓN
IdPromocion
DescripcionPromocion
IdSucursal Descuento
NombreSucursal CantVentas FechaInicio
GerenteSucursal ValorVentas FechaFin
CiudadSucursal
TotalM2
Mejores prácticas SQL 08
Usen las claves técnicas (o subrogadas) porque los joins mejoran el rendimiento . No usen los ID
de negocios.
Tengan en cuenta que no todo es una dimensión, piensen bien cuáles deben ser funcionales a las
necesidades del modelo.
FECHA SUCURSAL
VENTAS
Tabla de hechos
PRODUCTO PROMOCIÓN
Tabla de dimensión Tabla de dimensión
Mejores prácticas SQL 09
Es más complejo.
La pregunta del millón al momento de modelar bajo este esquema: “¿hasta qué nivel tiene sentido
seguir normalizando las dimensiones?” Dependerá del criterio de quien diseñe, pero…
TIP: Si tienen dimensiones muy pesadas (ejemplo con muchos productos) lo mejor va a ser
explotarlas para alivianarlas. Es decir, llevarlas a un esquema de copo de nieve (productos/fami-
lia/proveedores, etc.) Esto no significa que todas las dimensiones tienen que estar explotadas, sino
que van a explotar solo aquellas que tengan sentido para lo que hagan. Esto dependerá de la forma
de consumo, por ejemplo, si la herramienta de reportería soporta Copo de nieve.
Para cerrar, como ya les dijimos: el principal desafío a la hora de modelar es construir una ÚNICA
versión de la realidad y esto no tiene nada que ver con la tecnología (¡ojalá así fuera!)
En el modelado es dónde realmente tenemos que entender CUÁL es el OBJETIVO DE LO QUE ANALIZA-
MOS, sólo así el producto que hagamos será útil.
Categoria Marca
Zona Region
Color PRODUCTO SUCURSAL
Barrio Municipio
Tamanio
VENTAS
Tabla de hechos
Anio Mes
Semana_fiscal
Mes_fiscal
Anio_fiscal
Mejores prácticas SQL 10
Para explicarlo simple: hacer un data warehouse es construir una única versión de la realidad. Para eso hay
que consolidar las dimensiones de los modelos y —lo más difícil— conciliar las diferencias de criterio entre
las áreas o las personas.
Si los datos son el activo más importante de una organización, tenerlos limpios e integrados entre sí será
clave para poder utilizarlos cuando los necesiten.
DATA MART
Es un modelo de datos que representa un objeto de estudio en particular. Es decir, es la visión desde
el punto de vista de los datos de una problemática de negocios en particular. Puede ser desde algo
ambicioso como las ventas, el stock, las finanzas hasta cosas más puntuales como las campañas
comerciales, un proyecto en particular, etc.
En su versión más simple, no será más que una tabla de hechos con sus dimensiones.
Fecha Producto
Tabla de dimensiones Tabla de dimensiones
Sucursal
Tabla de dimensiones
Transporte Despachos
Tabla de dimensiones Tabla de hechos
Mejores prácticas SQL 11
Será clave en el proceso de modelando, ir consolidando las dimensiones a medida que van modelan-
do nuevas problemáticas de negocio.
Llevemos esto a la práctica: supongamos que tenemos un Data Mart comercial con una tabla de
hechos y diferentes dimensiones (fecha, producto, sucursal, promociones, etc.) Si estuviéramos
modelando el Data Mart de operaciones y en particular construyendo la tabla de hechos que almace-
nará los movimientos de stock, con seguridad habrá algunas dimensiones del Data Mart de ventas
que sí nos importarán y otras que no.
Sería un error de diseño –muy feo– NO reutilizar las dimensiones que ya tenemos. Si ya creamos las
dimensiones de fecha, producto, sucursal, etc. para analizar las ventas, al momento de analizar stock
NO hay que crear nuevas dimensiones: ¿qué debo modificar o extender de las dimensiones existentes
para poder dar soporte al nuevo análisis?
El desafío será: consolidar todo eso en el mismo modelo y conciliar las diferencias entre áreas: ¿qué
es un producto para comercial? ¿y para operaciones?
Recuerden: Hay que modelar la realidad conciliando las diferencias, eso es lo más complejo .
FECHA
PRODUCTO ID FECHA
ID PRODUCTO
ID SUCURSAL
Dimensión
SUCURSAL
Fact VENTAS
Dimensión
ID FECHA
ID PRODUCTO
PROMO ID SUCURSAL
ID PROMO
Dimensión
Bus Matrix
Es mucho más sencillo de lo que parece, es una forma de graficar la consolidación de las dimensio-
nes. Se grafica cruzando los Data Marts con sus dimensiones como muestra el gráfico de abajo.
Lo arman a medida que modelan y sirve justamente para identificar aquellas dimensiones que tienen
que reutilizar, conciliando las diferencias si las hubiera. En caso que no lo hagan, el Bus Matrix se va a
encargar de mostrarlo de forma muy evidente: por ejemplo, mostrando la dimensión cliente_marke-
ting y la dimensión cliente_operaciones.
Ordenes de compra
Inventario
Ventas de almacen
Tengamos en cuenta que siempre vamos a tener que gestionar la historia de las dimensiones. Los atributos
cambian —las personas se mudan, los nombres de los productos se modernizan, los precios cambian— y no
podemos pretender que las dimensiones se mantengan estáticas.
Recuerden que cuando modelamos, no podemos cambiar los hechos porque eso sería modificar el pasado. Por
lo tanto, tenemos que evolucionar la historia de las dimensiones, es decir, los ATRIBUTOS de los hechos.
Para eso aparecen las dimensiones lentamente cambiantes que son formas de modelar el manejo de la historia.
Hay tres tipos de dimensiones bien diferentes y *SPOILER ALERT* pensar que todas se manejan igual es un
error grave. Veamos en qué consiste cada una:
TIPO 1
Son las indicadas en caso que NO nos importe la historia de lo que vayamos a analizar. Por ejemplo,
un error de tipeo o una falta de ortografía en un nombre o apellido.
Se actualizan haciendo un UPSERT: insertamos los nuevos registros y modificamos los que haya que
cambiar.
Nos importan todos los cambios en la historia del dato. La nueva información se agrega a la vieja que
se mantiene.
Atención en este punto: de los atributos cuya historia vamos a mantener, por cada modificación se
agrega un nuevo registro, es decir, que vamos a hacer operaciones de INSERT generando una nueva
clave subrogada con fechas de inicio y fin para identificar a qué período corresponde el dato.
Se usan cuando necesitamos reconstruir la traza de los cambios de estado de la información. Por
ejemplo, la evolución del tipo de cambio de una moneda.
Son más complejas para mantener porque en ellas tenemos todas las versiones de los datos, es
decir, más de un registro.
En general tratamos de evitarlas y caer en las tipo 1 y eso está mal . A modo de consuelo, tengan
en cuenta que en la mayoría de los casos el análisis se ve afectado sólo por ALGUNOS de los atribu-
tos de la dimensión, no siempre son todos.
Por lo tanto, solo vamos a tener que gestionar como tipo 2 a ALGUNAS de las dimensiones, no a todas.
Son más complejas de mantener dado que, a diferencia que en Tipo 1 y Tipo 3, en las dimensiones
tenemos todas las versiones de los datos (más de un registro).
TIPO 3
Aplican cuando no nos interesa toda la vida del dato, sino solo UNA PARTE de los cambios que se
dieron en la historia. Por ejemplo, una persona pasó del segmento de consumo medio al alto.
La información nueva se guarda junto a la anterior. Para modelar agregamos tantas columnas como
versiones queramos de los datos o ponemos una columna con el dato actual y al lado otra con el
anterior.
Solo insertamos o actualizamos registros. No tenemos que complejizar los JOINS ni hacer UPSERTS
raros (como en las tipo 2).
Columnas adicionales son creadas para reflejar los cambios que son acontecidos.
Permite la visualización de los hechos tanto para el estado actual como para los estados pasados.
Mejores prácticas SQL 16
Se usan cuando hay varios atributos y sólo interesa uno. Entonces, en vez de construir y sacar la
dimensión a otra tabla, lo que se hace es degenerarla en la tabla de hechos.
Por ejemplo: cuando tenemos una fact transaccional y necesitamos utilizar el número de ticket.
Cuando aparecieron los sistemas distribuidos la tendencia era a degenerar prácticamente todo ya
que era muy costoso hacer los joins. Sin embargo, a medida que las cosas evolucionaron ya no se
hace así y hoy solo lo hacemos cuando tiene sentido.
Tengan en cuenta que si degeneran demasiado una dimensión, en caso de tener que reprocesar algo,
van a tener que hacer un UPDATE letal sobre la tabla de hechos y eso no es nada bueno. Presten
atención.
Moraleja: de fábrica nos chipearon para NORMALIZAR, porque era TERRIBLE duplicar los datos, sin
embargo a veces hay que pensar las cosas desde otra perspectiva .
FactFactura
DimProducto
DimTiempo IdFechaDespacho
IdFechaPedido IdProducto
IdFecha IdProducto ProductoDesc
FechaDesc IdCliente
Dia IdCentroDistribucion
Mes NroFactura DimCliente
Anio
Cantidad IdCliente
Importe Nombre
Apellido
Descuento Direccion
ImporteNeto Ciudad
ImporteBruto Estado
DimCentroDistribucion
IdCentroDistribucion
Nombre
Ciudad
Estado
Tipo
Region
Mejores prácticas SQL 17
Las pueden usar para hacer análisis muy particulares o cuando tengan dimensiones con muchos
atributos y las quieran acotar ya que no necesitan tanto detalle.
Se trata de combinar distintos atributos —idealmente de cosas que se analicen de forma conjunta— y
de unificarlos en una misma dimensión.
Se llaman basura porque no representan una característica de los datos (como cliente, sucursal,
región) sino un conjunto agrupado de los mismos.
Cliente DimCliente
IdCliente IdCliente
NombreCliente NombreCliente
FechaNacim FechaNacimiento
... ...
Edad Edad
Ingreso
FlagPropietario
FlagContactado
DimBasura
NivelEdad
RangoGeneracional
NivelIngreso
FlagPropietario
FlagContactado
Mejores prácticas SQL 18
Podrían almacenar observaciones definidas por claves de dimensión. Por ejemplo, en una fecha y
hora determinadas, un cliente concreto ha iniciado sesión en el sitio web.
Pueden definir una medida para contar las filas de la tabla de hechos sin hechos a fin de realizar un
análisis de cuántos clientes han iniciado sesión y cuándo lo han hecho.
Mejores prácticas SQL 19
Errores frecuentes I
Distinta granularidad
Supongamos que modelan una necesidad y tienen la tabla de hechos con cierto grano (por ejemplo:
ventas diarias y apertura por producto y sucursal).
Este nivel sería suficiente en caso de tener que alimentar cosas con un nivel de grano mayor, por
ejemplo las ventas por mes, por año, etc.
Cuando tienen mucha información en la tabla de hechos, será necesario construir tablas agregadas.
En este punto hay que empezar a pensar en un concepto muy importante: el LINAJE DE DATOS que
es cuando el grano fino alimenta al más grande.
Las tablas agregadas muchas veces se derivan de la tabla de hechos que ya tenían (las ventas por
mes de las ventas por día).
Pero, ¿qué pasa si las cosas se dan vuelta? Tienen la tabla con el grano más alto (mes por ejemplo) y
necesitan el más fino (día).
En este caso no quedará otra que modelar y reprocesar para construir una tabla con un nivel de grano
menor.
Y en este punto hay que tener mucho cuidado porque, si no se hace de forma correcta, pueden surgir
muchos problemas.
Para que todo se mantenga bajo un esquema de gobierno y de coherencia, cuando construyan la
tabla con el grano más fino, tienen que modificar la lógica de la tabla anterior que ya estaba funcio-
nando para que se derive de la nueva.
En la práctica: la lógica vieja pasa a ser la base de la lógica nueva y el proceso de carga de la tabla
vieja pasa a ser de nuevo un GROUP BY. Así es como se respeta el linaje.
Mejores prácticas SQL 20
Errores frecuentes II
Múltiples monedas
En estos casos tienen que pensar qué nivel de complejidad quieren manejar. Como siempre en la vida, habrá dos
caminos:
El fácil: la solución es poner la misma métrica ya calculada y pegar al lado los valores en la tabla de
hechos con los distintos atributos (en pesos, en dólares, etc.) Así evitarán tener que ir a una dimen-
sión tipo 2 porque el tipo de cambio ya es un hecho.
El difícil: En otros casos pueden ir directo a una dimensión tipo 2 y versionar todo lo que necesiten y
fin de la historia.
Mejores prácticas SQL 21
Atributos que no suelen pertenecer a otras dimensiones y que no parecen organizarse de manera
coherente para conformar una dimensión.
Para evitar poblar la tabla de hechos con este tipo de atributos, una opción es generar una nueva
dimensión que los agrupe.
Los atributos pueden construirse con todas las combinaciones posibles/producto cartesiano, o tan
solo con las combinaciones detectadas.
La dimensión puede contar además de los flags Si/No, Activo/Inactivo, 0/1, True/False, etc., la
descripción asociada a los mismos.
Mejores prácticas SQL 22
Conclusiones
Para terminar, les dejamos algunas conclusiones que deben tener muy presentes cada vez que se sienten a
modelar.
Modelo lógico bien mantenido = gobierno = productividad: Lo importante es dar forma a un modelo
que garantice la integridad de los conceptos que modelan. Si logran una única representación de la
realidad, los equipos nuevos no van a tener que reinventar la rueda, simplemente tendrán que tomar
los atributos que ya están y extenderlos.
Modelamos de atrás para adelante: Partimos de la necesidad de datos, para entenderla es super
importante hablar con las personas, conocer qué necesitan y modelar a partir de eso. Los perfiles de
Business Analytics Translators (BATs) son claves en este sentido. Se trata de traducir problemáticas
de negocio en soluciones basadas en datos a través del proceso de modelado. Para esto, en el mejor
de los casos, podrán partir de reportes y en el peor, tendrán que hacer desde cero todas las preguntas
e interpretarlas.
El modelo tiene que ser coherente: Ante la duda pregunten SIEMPRE. No caigan en el facilismo de
considerar que todo es una dimensión porque no van a terminar nunca de modelar y, a la larga,
siempre va a faltar algo.
Prestar atención al linaje de datos: Si quieren tener gobierno, tienen que respetar el linaje, que
implica (casi siempre) ir de mayor a menor detalle. Esos procesos hay que respetarlos ya que es la
forma más fácil de garantizar la coherencia de los cálculos.
Recuerden que esto se trata de partir del dato más crudo hasta el dato más cocido pasando por todas las instan-
cias. Si respetan esto, su vida será más feliz. Y sabemos por qué lo decimos.
¿Quiénes somos?
Datalytics es una compañía especializada en DATA & IA que acompaña a las empresas en la
modernización de sus productos y servicios a partir del uso de los datos. Nuestros equipos tienen
más de 15 años de experiencia ayudando a los sectores líderes a tomar decisiones más
informadas, a mejorar sus operaciones y a crear nuevos modelos de negocio.
Si te interesa formar parte de nuestro equipo, estas son nuestras las posiciones abiertas.