seegongsik
Datos

Qué es la normalización de bases de datos

Imagina que cada vez que llega un pedido escribes en la misma tabla, junto con él, el nombre y el teléfono del cliente. Si el mismo cliente pide diez veces, el mismo nombre y el mismo número se repiten, sin cambios, en diez filas. Si luego ese cliente cambia de teléfono, tienes que corregir las diez filas, y si se te escapa una sola, en esa fila queda el número viejo. El problema empieza por escribir la misma información más de una vez. Dividir las tablas para que cada dato repetido quede en un solo lugar se llama normalización.

01

Cuando la misma información se escribe una y otra vez

En la lección anterior enlazamos dos tablas por una columna compartida para responder una pregunta. Esta vez, desde el otro lado, veamos por qué las tablas se dividen así en primer lugar. Supón que cada vez que recibes un pedido agregas una fila a una sola tabla y anotas en ella también el nombre y el teléfono del cliente.
Cuando el mismo cliente pide varias veces, su nombre y su número se vuelven a escribir, idénticos, en cada fila. En la tabla de abajo, Minsu aparece tres veces, una por cada uno de sus tres pedidos.

pedido
cliente
teléfono
A-01
Minsu
010-1111
A-02
Jiyoung
010-2222
A-03
Minsu
010-1111
A-04
Haneul
010-3333
A-05
Minsu
010-1111
A-06
Jiyoung
010-2222
Toca un nombre de cliente para hallar la repetición

Toca un nombre de cliente. Verás de un vistazo en cuántas filas se repiten, idénticos, los datos de ese cliente.

La misma información queda grabada fila tras fila. Ocupar espacio de más es un problema, pero el problema mayor llega al hacer cambios. Si Minsu cambia de teléfono, hay que buscar y corregir cada fila donde aparece Minsu, y si se escapa una sola, la misma persona termina con dos números. Mirando solo la tabla, no hay forma de saber cuál es el correcto.
Y no es el único problema. Un cliente nuevo que todavía no ha pedido nada no tiene fila donde ir, así que ni siquiera puedes registrar su nombre; y si borras el único pedido de Haneul, su teléfono desaparece con él. Estos desajustes que aparecen al actualizar, insertar o borrar se llaman anomalías.

02

Separa la parte que se repite

La solución es más sencilla de lo que parece: sacar la parte que se repite y darle una tabla propia. En vez de escribir el nombre y el teléfono del cliente en cada pedido, los escribes una sola vez, una fila por persona, en una tabla de clientes que solo guarda clientes.
Así, la tabla de pedidos pierde todo el bloque de datos del cliente y conserva solo las columnas que pertenecen al pedido, como el número de pedido. En el fondo, se trata de averiguar a qué pertenece cada dato y ponerlo en su lugar.

tabla de pedidos
pedido
cliente
teléfono
A-01
Minsu
010-1111
A-02
Jiyoung
010-2222
A-03
Minsu
010-1111
A-04
Haneul
010-3333
A-05
Minsu
010-1111
A-06
Jiyoung
010-2222
Toca dividir para sacar la repetición

Toca dividir. Los datos de cliente que se repetían salen de la tabla de pedidos y se reúnen en la tabla de clientes, una fila por cliente.

Los datos de los clientes ya están en un solo lugar. Ahora, si Minsu cambia de número, corriges una fila de la tabla de clientes y listo. Haya cien pedidos o mil, solo hay una fila que corregir, así que nada se escapa y nadie termina con dos números. Un cliente nuevo puede registrarse en la tabla de clientes antes de pedir nada, y borrar un pedido deja intactos los datos del cliente.
Pero surge una duda. Si sacamos los datos del cliente de la tabla de pedidos, ¿cómo sabemos de quién es cada pedido?

03

Vuelve a enlazarlas por una columna común

Aquí entra en juego el join de la lección anterior. Al dividir una tabla no basta con separar las partes: hay que dejar una columna que compartan las dos tablas. La tabla de clientes guarda el número de cliente, el nombre y el teléfono, y la tabla de pedidos guarda solo el número de cliente en lugar del nombre.
Ese número de cliente es el hilo que ata las dos tablas. Lees el número de un pedido, buscas el mismo número en la tabla de clientes y sabes al instante de quién es ese pedido.

Un solo número ha enlazado las dos tablas. Aunque cada dato esté escrito en un único lugar, siguiendo el hilo puedes juntar las piezas cuando quieras. La repetición desaparece y los lugares que corregir se reducen a uno, y aun así un join reúne toda la información que necesitas.
Esta es la esencia de la normalización. En la práctica, esta idea se ordena en una serie de reglas llamadas formas normales, que empiezan por guardar un solo valor en cada celda y van puliendo las tablas paso a paso. Pero hasta lo bueno, en exceso, trae problemas. ¿Qué pasa si divides las tablas demasiado?

04

Si divides de más, a veces fusionas a propósito

Si divides todo en trozos pequeños solo para evitar la repetición, las tablas no paran de multiplicarse: las direcciones en una tabla de direcciones, los niveles de cliente en una tabla de niveles, una tabla aparte para cada pequeño detalle.
Entonces, para ver bien a un solo cliente, hay que unir tres o cuatro tablas con joins. Los joins tienen un costo, así que cuantas más tablas hay que enlazar, más tarda la respuesta. La repetición bajó, pero la lectura se volvió más lenta.

tabla de pedidos
tabla de clientes
tabla de direcciones
tabla de niveles
tablas que enlazarmuchas
repeticiónninguna
Sin repetición, pero para ver a una persona hay que enlazar cuatro tablas, así que es lento.

Alterna entre dividir fino y fusionar a propósito. Cuanto más fino divides, más tablas hay que enlazar; al fusionar vuelve un poco de repetición, pero todo se ve de una sola vez.

Dividir y fusionar son un toma y daca. Dividir fino no deja repeticiones y queda ordenado, pero cada lectura se hace más lenta porque hay que enlazar tablas. Por eso, la información que siempre se lee junta a veces se fusiona a propósito en una sola tabla; esto se llama desnormalización.
Tiene un precio. La misma información vuelve a estar en varios lugares, así que hace falta algún mecanismo para mantener esas copias de acuerdo cada vez que algo cambia. Donde las escrituras son frecuentes, se tiende a la normalización; donde las lecturas superan con mucho a las escrituras, se tiende a la desnormalización. Así se busca el equilibrio.

05

Resumen

En resumen: escribir la misma información una y otra vez en una tabla desperdicia espacio, y la información se desajusta al actualizar, insertar o borrar. Por eso se saca la parte que se repite a una tabla aparte y se vuelven a enlazar las tablas por una columna común.
Cada dato se guarda en un solo lugar y se junta con un join cuando hace falta. Si dividir de más vuelve todo lento, a veces se fusiona a propósito, y encontrar ese equilibrio también es parte de la normalización.

Toca los puntos clave en orden para repasar

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 un criterio para decidir cómo dividir las tablas y dónde parar. Si cada dato está en un solo lugar, hay menos ocasiones de que algo se desajuste al hacer cambios.
A veces, sin embargo, hay que cambiar varias tablas a la vez. Piensa en registrar un pedido y, al mismo tiempo, descontar las existencias: si solo se completa una de las dos cosas antes de que todo se detenga, las tablas quedan en desacuerdo. La próxima lección, sobre las transacciones, explica cómo agrupar varios cambios en una sola unidad para que se hagan todos o ninguno.

En una líneaLa normalización es el orden que consiste en sacar la información que se repite en una tabla, pasarla a una tabla aparte y volver a enlazar las tablas por una columna común. En vez de escribir el nombre del cliente en cada pedido, lo escribes una sola vez por persona en una tabla de clientes y dejas en la tabla de pedidos solo el número de cliente. Así, un teléfono nuevo significa corregir una sola fila de la tabla de clientes, un cliente sin pedidos puede registrarse igual y borrar un pedido deja intactos los datos del cliente. La información que necesites se puede volver a reunir con un join en cualquier momento. Pero si divides demasiado, cada lectura exige enlazar muchas tablas, y eso puede ser lento. En ese caso, la información que siempre se lee junta se fusiona a propósito en una sola tabla, lo que se llama desnormalización. La clave de la normalización es un equilibrio: separar la repetición y enlazar por relaciones, pero volver a fusionar cuando la división va demasiado lejos.
← Datos
¿Te fue útil? Apoyar seegongsik