lunes, 3 de enero de 2011

Normalizar, que no “formalizar”

La normalización es un ejercicio de sentido común —convenientemente traducido a un lenguaje formal que, por cierto, nosotros no vamos a utilizar— para conseguir esquemas de base de datos eficientes. El término clave es redundancia. No la queremos. La odiamos.

El ejemplo clásico es el vecino que un día descubrió el Access® dentro de su disco duro y que a fuerza de autoaprendizaje ha declarado al mundo que las bases de datos son su pasión. Regenta un kiosko de periódicos que, como es habitual, también vende chuches y juguetillos de plástico de todo a 1€. Pues este señor nuestro ha diseñado la siguiente base de datos, consistente en una única tabla.

artículo descripción precio dni nombre localidad fecha
P1 Información 1,10 2122 Pepe El Campello 1/1/2009


El problema de ser un feliz de la vida, en estas cosas concretamente, es que claves primarias o ajenas son artefactos perfectamente prescindibles. ¿Qué hay más elegante que una tabla donde pongo qué vendo y a quién se lo vendo? Bueno, vamos a suponer que tus clientes no huyen de tu kiosko porque cada vez que se llevan el Información les preguntas por su DNI, nombre y localidad de residencia. Supongamos que Pepe es así de majo, y vuelve.

artículo descripción precio dni nombre localidad fecha
P1 Información 1,10 2122 Pepe El Campello 1/1/2009
P1 Información 1,10 2122 Pepe El Campello 2/1/2009


La paciencia es una virtud pero tú ya te estás agobiando y empiezas a meter gazapos.

artículo descripción precio dni nombre localidad fecha
P1 Información 1,10 2122 Pepe El Campello 1/1/2009
P1 Información 1,10 2122 Pepe El Campello 2/1/2009
P1 Informasión 1,20 2122 Peper El Camello 3/1/2009

Hasta ahora, la cosa es manejable, pero supongamos que tu kiosko es el único en 100 Km a la redonda y no hay más narices que ir al tuyo para conseguir la prensa: ¿1000? ¿10.000? ¿100.000 filas?

La redundancia es eso, repetir información innecesariamente. Un mal diseño como este genera problemas de integridad de datos. ¿Existe una población que se llama “El Camello” o es que tus gordos dedos se han comido una “p”? ¿Pepe tiene dos nombres? ¿Qué periódico es el “Informasión”? Si era el Información, ¿por qué le has cobrado 10 céntimos de más?

Eliminar la redundancia, normalizar esta tabla, consiste en separar los datos que son de uno y de otro y relacionar esta información.


cliente
dni nombre localidad
2122 Pepe El Campello


artículo
artículo descripción precio
P1 Información 1,10


ventas
artículo cliente fecha
P1 2122 1/1/2009
P1 2122 2/1/2009
P1 2122 3/1/2009

Obviamente, la clave primaria de Ventas, junto con la fecha, es la composición de dos claves ajenas definidas para asegurar la integridad referencial, y dni y artículo son las claves primarias de sus respectivas tablas.

Durante un par de semanas profundizaremos en los problemas que genera un mal diseño del esquema de base de datos relacional y en cómo tratar las dependencias funcionales implícitas en la propia definición de los datos a manejar. En un principio, la normalización era el proceso de diseño de bases de datos relacionales. Ahora hay otros métodos y modelos mucho más cómodos y ricos, la normalización se puede ver como la justificación de por qué los esquemas son como son pero, también, como un procedimiento de verificación de la calidad de un diseño.

En definitiva, una herramienta más que incrementará nuestra habilidad para decir cosas con el modelo relacional.
Edición de lo publicado originalmente en bd1blog, el 6 de febrero de 2009.