Saltar al contenido
Data & Systems

Lo que nadie te cuenta sobre diseñar una base de datos desde cero

El dato primero. La tecnología, después.

Cuando decidí construir mi propio sistema para la empresa 3PL donde trabajo, no tenía experiencia en desarrollo de software. Tenía algo distinto: conocía la operación por dentro.

Sabía exactamente qué datos importaban, cuáles eran ruido, y qué flujo tenía que seguir la información para que el sistema fuera útil de verdad. Lo que no sabía era cómo traducir eso a tablas, relaciones y queries eficientes. Y eso, resultó ser el trabajo más importante de todo el proyecto.

#Primero, entender qué datos realmente importan

Antes de abrir Supabase, hice algo que cualquier ingeniero industrial haría de forma instintiva: fui a la fuente del problema. Los clientes nos enviaban pre-alertas en Excel. Cada uno tenía su propio formato — columnas distintas, nombres distintos, órdenes distintos. Pero nosotros trabajábamos con un estándar de datos. Así que lo primero fue identificar cuál era ese estándar.

Pre-alerta
  • Ref PO — número de referencia de la orden de compra
  • Número de factura
  • Datos de tracking
  • Cliente
Recepción en bodega
  • Número de ticket del warehouse
  • Bodega donde se recibió
  • Medidas y peso
  • Valor de la mercancía (para seguro)

Tener claro ese estándar antes de diseñar la primera tabla fue la decisión más importante de todo el proyecto. No empecé por la tecnología — empecé por el dato. Y el dato lo conocía porque vivía la operación todos los días.

#El diseño que no fue un rediseño, sino una evolución

Rediseñé las tablas tres o cuatro veces antes de que se sintieran bien. Pero no fueron rediseños traumáticos — fueron evoluciones. Conforme avanzaba módulo a módulo, entendía mejor las relaciones que necesitaba y agregaba columnas que hacían la información más coherente.

Esto lo aprendí en el máster de análisis de datos: pensar en bases de datos relacionales no es solo definir tablas — es diseñar el flujo de información. Cómo se conecta una entidad con otra, cómo evitar duplicar datos, cómo garantizar que si algo cambia en un lugar, el cambio se propague correctamente al resto.

La diferencia entre una base de datos bien diseñada y una mal diseñada no siempre se ve en el día uno. Se ve cuando el sistema crece, cuando aparecen casos que no anticipaste, cuando alguien hace algo que no esperabas y el sistema tiene que responder con coherencia.

v1

Tablas básicas — flujo identificado

v2

Relaciones ajustadas — columnas añadidas

v3

Módulos nuevos — esquema maduro

Por eso fui despacio. Módulo a módulo. Entendiendo bien lo que hacía antes de avanzar al siguiente. No tuve que rehacer nada desde cero — tuve mejoras, no reingeniería.

#La decisión que un desarrollador convencional no habría tomado

Hay una funcionalidad en el sistema que nació directamente de conocer la operación: la desconsolidación de carga.

En logística, a veces un paquete que llega como una unidad necesita dividirse en varios paquetes para enviarse a distintos destinos. La forma estándar que había visto en otros ERPs era simple: marcas el paquete como desconsolidado y creas los nuevos paquetes manualmente. Técnicamente funciona. Operativamente, pierdes la trazabilidad.

En logística, saber de dónde viene cada paquete no es un detalle — es un requisito.

Así que diseñé la herramienta de otra manera: cuando desconsolidás un ticket, el sistema lo marca como "reempacado" y crea los tickets hijos vinculados al padre. La relación padre-hijo queda registrada en la base de datos. Podés ver en cualquier momento de dónde vino cada paquete, qué se hizo con él y hacia dónde fue.

Trazabilidad padre-hijo
TICKET #1042 reempacado
#1042-A
#1042-B
#1042-C

Un desarrollador que no conoce logística habría implementado la versión simple — la que vio en el ERP de referencia — porque técnicamente resuelve el problema. Yo implementé la versión con trazabilidad completa porque sabía exactamente por qué esa trazabilidad importaba.

#Los errores silenciosos — y cómo aprendí a buscarlos

Fue en producción donde aprendí que existían los errores silenciosos. El sistema funcionaba. No había crashes, no había datos corruptos, no había nada que rompiera el flujo. Pero algo no se veía bien.

Una pre-alerta marcada como recibida de forma incompleta aparecía en dos módulos al mismo tiempo: en Pre-alertas y en Bodega. Era correcto que estuviera en los dos — una recepción incompleta necesita seguimiento en ambos lados. El problema era que no había ninguna indicación visual de que estaba incompleta. Sin un badge, sin un color, sin ninguna señal — simplemente aparecía igual que cualquier otra pre-alerta. Y eso generaba confusión.

Sin badge
PRE-ALERTA #042
PRE-ALERTA #043
PRE-ALERTA #044 ← incompleta

¿Cuál es incompleta?

Con badge
PRE-ALERTA #042
PRE-ALERTA #043
PRE-ALERTA #044 Incompleta

Claro al instante.

Funcionaba. Pero no se entendía.

Ese es el error silencioso: no rompe nada, no genera una alerta, no aparece en ningún log. Pero crea ambigüedad. Y la ambigüedad en un sistema operativo es peligrosa, porque las personas toman decisiones basadas en lo que ven — y si lo que ven no es claro, las decisiones tampoco lo son.

La solución fue simple: un badge que indicara "Recepción incompleta" en ambos módulos. Pero encontrar el problema requirió algo que no está en ningún tutorial: usar el sistema con ojos críticos, como alguien que no sabe qué está mirando.

Desde entonces, esa es mi prueba para cada módulo nuevo: ¿lo entendería alguien sin contexto? ¿O requiere que yo esté ahí para explicarlo? Si requiere explicación, el diseño no está terminado.

#Lo que aprendí

01
El diseño de datos es diseño de procesos
Las tablas no son cajas donde guardas información — son la representación de cómo fluye el negocio. Si entiendes el negocio, entiendes cómo deberían conectarse.
02
La evolución es mejor que la perfección inicial
No existe la base de datos perfecta en el día uno. Existe la base de datos que crece con inteligencia, que anticipa cambios y que no obliga a rehacer todo cuando aparece un caso nuevo.
03
Los errores más peligrosos no rompen nada
Son los que dejan que el sistema funcione mal sin que nadie lo note. Buscarlos activamente, con ojos de usuario inexperto, es parte del trabajo tanto como escribir el código.
+400 paquetes y 120 salidas internacionales en los primeros 3 meses de producción — con una muestra de 2 clientes para prueba del sistema.

Nada de eso hubiera sido posible si no hubiera empezado por la pregunta correcta: no "¿cómo diseño esto?" sino "¿qué necesita saber el sistema para que la operación funcione?"

Jaime Arias — Ingeniero Industrial, Head of Operations en una empresa 3PL, desarrollador de sistemas que resuelven problemas que yo mismo he vivido.