Normalización
Hasta este momento, hemos hecho relaciones entre tablas por medio de las uniones (LEFT JOINS o INNER JOINS), lo cual nos permite relacionar varias tablas y hacer consultas para poder tener los datos de varias tablas formando un conjunto valioso que se llama Información.
Sin embargo, hasta este momento, no hemos mencionado el tipo de relaciones que pueden existir entre tablas (sólo hemos mencionado el tipo de uniones que pueden existir, no el tipo de relaciones).
A nivel teórico, diremos que el tipo de relaciones entre tablas pueden ser:
DE UNO A UNO
DE UNO A MUCHOS
DE MUCHOS A MUCHOS
Para ejemplificar lo anterior, veamos un ejemplo de la vida real:
Veamos nuestro cuerpo, nuestra mano, por ejemplo puede pertenecer a un solo de nuestros brazos, lo cual, es obviamente una relación de uno a uno, una mano, un brazo.
Por otro lado, nuestra mano puede tener varios dedos, pero los dedos de nuestra mano derecha, pueden pertenecerle exclusivamente a nuestra mano derecha, es decir: una mano, muchos dedos, pero muchos dedos pertenecen a una sola mano, lo cual define a la perfección una relación de uno a muchos.
Finalmente, los microbios de nuestra mano derecha pueden fácilmente pasar a nuestra mano izquierda, es decir muchos microbios, muchas manos (tranquilos, hasta los que se lavan a diario padecerán los problemas de los microbios), lo que obviamente implica una relación de muchos a muchos.
Antes de proseguir, hay que decir que MySQL no soporta la relación de muchos a muchos, por lo que se hace necesaria la intervención de una tabla intermediaria.
Hemos de decir que todo lo anteriormente mencionado es parte de lo que se conoce como NORMALIZACIÓN, lo cual indica el grado de eficiencia con la que nuestra base de datos está diseñada.
Una vez que nuestras relaciones están definidas, pues, dicho de nuevo hay que saber que tipo de relación habremos de establecer entre nuestras tablas (de uno a uno, de uno a muchos o de muchos a muchos), debemos proceder a la segunda parte de la normalización.
Debemos tener en cuenta que (y esto es muy importante), las tablas que nosotros definamos en nuestra base de datos, deberán cumplir con todas las necesidades de nuestro usuario final, de nuestro personaje de soporte técnico, de nuestro programador estrella, etc. etc. etc. De tal manera que, debemos preguntarnos si es más eficiente tener una columna repetitiva en una sola tabla, o tener una tabla específica para evitar que, por ejemplo el usuario cometa errores de digitación a la hora de consultar datos y darle la posibilidad de cometer errores de digitación (dedazos para los más eruditos).
Para explicar un poco más esto, digamos por ejemplo, que estamos modelando una base de datos en la que se hace necesario insertar una serie de productos (digamos libros y discos) y que dichos datos será el usuario el que los tiene que insertar, junto con el nombre del disco o el libro respectivo claro está. Lo más lógico es tener una pequeña tabla con los ítems libro y disco, de tal manera que el usuario no tenga que digitar libro o disco cuando vaya a insertar un producto, sino únicamente seleccionarlos de una tabla que ya los guarda para él.
Esto mis queridos amigos y amigas, son los principios de la normalización. ¿Más por venir? Claaaaaaaaaaaaaro, pero de momento,… Hasta Pronto.