Normalización: ordenar quitando repeticiones
Imagina que cada vez que llega un pedido escribes el nombre y el teléfono del cliente en la misma tabla. Si el mismo cliente pide diez veces, ese nombre queda idéntico en diez filas. Entonces el cliente cambia su teléfono, y debes corregir las diez filas; si olvidas una, alguna celda sigue con el número viejo. Escribirlo una y otra vez es el problema. Ordenar quitando esa repetición es la normalización.
Cuando la misma info se escribe una y otra vez
Antes aprendimos a leer dos tablas
enlazadas por una columna común.
Esta vez miramos dentro de una sola tabla.
Cada vez que llega un pedido
añadimos una fila a la misma tabla,
y escribimos también el nombre y el teléfono del cliente.
Si el mismo cliente pide muchas veces,
ese nombre y número se repiten igual por fila.
Las celdas se llenan con el mismo texto.
Toca un nombre de cliente. La info del mismo cliente, repetida igual en varias filas, se resalta de un vistazo.
La misma info queda grabada en cada fila.
Primero, desperdicia espacio,
porque el mismo nombre se escribe una y otra vez.
El problema mayor está en otra parte.
Si el cliente cambia su teléfono
debes hallar y corregir cada fila con ese cliente.
Si olvidas una sola,
unas filas muestran el número nuevo y otras el viejo.
Mismo cliente, pero la info no concuerda.
Separa la parte que se repite
El arreglo es sorprendentemente simple.
Saca la parte que se repite
y hazle una tabla aparte.
El nombre y el teléfono del cliente
no deben escribirse por pedido;
escribe cada uno una sola vez en una tabla solo de clientes.
Entonces la tabla de pedidos
pierde el bloque entero de info de cliente
y queda mucho más ligera.
Toca dividir. La info de cliente repetida se separa de la tabla de pedidos y se reúne en una tabla de clientes aparte.
La info de cliente quedó reunida en un lugar.
Ahora si un cliente cambia su número
corriges solo una fila en la tabla de clientes.
Ya sean cien pedidos o mil,
hay exactamente una fila que corregir.
Nada que olvidar, nada que discrepe.
Pero surge una preocupación.
Como sacamos la info de cliente de la tabla de pedidos,
¿cómo sabemos qué pedido es de quién?
Vuelve a enlazarlas por una columna común
Aquí el enlace que aprendimos antes cobra vida.
Al dividir, no puedes solo arrancarlas.
Deja una columna común en ambas tablas.
La tabla de clientes guarda el número y el nombre;
la tabla de pedidos guarda solo el número, no el nombre.
Este número de cliente es el hilo que ata las dos.
Mira el número en la tabla de pedidos,
halla el número igual en la tabla de clientes,
y al instante sabes de quién es el pedido.
Toca un número de cliente en una fila de pedido. Un hilo enlaza con la fila de cliente del número igual, revelando de quién es el pedido.
Un número ató las dos tablas.
Aunque la info esté escrita en un solo lugar,
seguir el hilo te deja combinarla cuando quieras.
La repetición desapareció
y los lugares que corregir se redujeron a uno,
pero toda la info necesaria se reúne igual.
Este es el corazón de la normalización.
Pero hasta lo bueno, en exceso, da problemas.
¿Qué pasa si divides las tablas demasiado fino?
Si divides de más, a veces fusionas
Si divides fino solo por odiar la repetición,
las tablas se multiplican.
Dirección en una tabla, nivel en otra,
una tabla aparte para cada cosita.
Entonces, para ver bien a un cliente,
debes enlazar tres o cuatro tablas.
Cuanto más enlace haya,
más tiempo cuesta leer.
La repetición bajó, pero la velocidad se frenó.
Alterna entre dividir fino y fusionar a propósito. Dividir suma tablas que enlazar; fusionar trae repeticiones pero se ve de una.
Dividir y fusionar se compensan entre sí.
Dividir fino recorta la repetición y queda ordenado,
pero cada lectura es lenta por enlazar tablas.
Para info que se mira junta a menudo
puedes fusionarla a propósito en una tabla.
Entonces vuelve un poco de repetición,
pero la lees rápido de una, sin enlazar.
Fusionar a propósito así
se llama desnormalización. Es cuestión de equilibrio.
Resumamos
Reunido en una línea, es esto.
Escribir la misma info repetida en una tabla
desperdicia espacio y genera desajustes.
Así que sacamos la parte que se repite,
la dividimos en una tabla aparte,
y las re-enlazamos por una columna común.
Entonces la info vive en un solo lugar
y la combinamos siguiendo el hilo cuando hace falta.
Pero si se vuelve lento por dividir muy fino,
fusionamos a propósito. Ese es el equilibrio.
Toca los puntos clave en orden para repasar. (la repetición desperdicia y desajusta -> separa las repeticiones -> enlaza por una columna común -> fusiona a propósito si divides de más)
Ahora tienes una manera de pensar
para ordenar tablas con limpieza.
Separa repeticiones y enlaza por relación,
pero fusiona de vuelta si va demasiado lejos, un equilibrio.
Esto sirve no solo para tablas
sino en general al ordenar cualquier cosa.
La maña de recortar la duplicación para evitar errores,
y de reunir de nuevo para leer rápido cuando hace falta.
Sigamos juntos a la próxima historia.