viernes, 5 de mayo de 2017

Elementos Básicos sobre Normalización en Bases de Datos. Parte I



El presente artículo tiene como objetivo proveer al lector de conocimientos básicos acerca de la Normalización en Bases de datos, como uno de los aspectos principales a tener en cuenta cuando desarrollamos aplicaciones web y queremos, entre otras cosas, lograr: código PHP más fácil de comprender, ampliar, y en determinados casos, hacer tu aplicación más rápida.

En general

Un factor vital en la creación de páginas web dinámicas es el diseño de las Bases de Datos (BD). Si tus tablas no están correctamente diseñadas, te pueden causar muchos problemas cuando tengas de realizar complejas llamadas SQL en el código PHP para extraer los datos que necesitas. Si conoces como establecer las relaciones entre los datos y la normalización de estos, estarás preparado para comenzar a desarrollar tu aplicación en PHP.

Las reglas de Normalización están encaminadas a eliminar redundancias e inconsistencias de dependencia en el diseño de las tablas, debes que tener en cuenta que debes crear una BD funcional y eficiente.

Digamos que queremos crear una tabla con la información de usuarios, y los datos a guardar son el nombre, la empresa, la dirección de la empresa y algún email si lo tienen. En principio comenzarías definiendo la estructura de una tabla como esta:

Formalización Cero:

usuarios

nombre
empresa
dirección_empresa
email1
email2
Pedro
LCT
Lacetel, Miramar, Habanal
direccion@lacetel.com
economia@lacetel.cu
Jorge
CGR
Cubagran, Bayamo, Granma
direccion@cubagran.com
economia@cubagran.cu

Diríamos que la anterior tabla esta en nivel de Formalización Cero porque ninguna de nuestras reglas de normalización ha sido aplicada. Observa los campos email1 y email2 ¿Qué haremos cuando en nuestra aplicación necesitemos un tercer email? ¿Quieres tener que añadir otro campo/columna a tu tabla y tener que reprogramar toda la entrada de datos de tu código PHP? Seguramente, tú quieres crear un sistema funcional que pueda crecer y adaptarse fácilmente a los nuevos requisitos. A continuación veremos las reglas del Primer Nivel de Formalización-Normalización, y las aplicaremos a nuestra tabla.

Primer nivel de Formalización/Normalización. (F/N)

1. Eliminar los grupos repetitivos de las tablas individuales.
2. Crear una tabla separada por cada grupo de datos relacionados.
3. Identificar cada grupo de datos relacionados con una clave primaria.



Como puedes apreciar estamos rompiendo la primera regla cuando repetimos los campos email1 y email2. ¿Y qué pasa con la tercera regla, la clave primaria? La regla tres básicamente significa que tenemos que poner un campo tipo contador auto-incrementable para cada registro. De otra forma, ¿Qué pasaría si tuviéramos dos usuarios llamados Joe y queremos diferenciarlos. Una vez que aplicáramos el primer nivel de F/N nos encontraríamos con la siguiente tabla:

usuarios
id
nombre
empresa
dirección_empresa
email
1
Pedro
LCT
Lacetel, Miramar, Habanal
direccion@lacetel.com
1
Pedro
LCT
Lacetel, Miramar, Habanal
economía@lacetel.com
2
Jorge
CGR
Cubagran, Bayamo, Granma
direccion@cubagran.com
2
Jorge
CGR
Cubagran, Bayamo, Granma
economía@cubagran.com

Ahora diremos que nuestra tabla está en el primer nivel de F/N. Hemos solucionado el problema de la limitación del campo email. Pero sin embargo vemos otros problemas. Cada vez que introducimos un nuevo registro en la tabla usuarios, tenemos que duplicar el nombre de la empresa y del usuario. No sólo nuestra BD crecerá muchísimo, sino que será muy fácil que la BD se corrompa si escribimos mal alguno de los datos redundantes. Aplicaremos entonces el segundo nivel de F/N:

Segundo nivel de F/N:

1. Crear tablas separadas para aquellos grupos de datos que se aplican a varios registros.
2. Relacionar estas tablas mediante una clave externa.

Hemos separado el campo email en otra tabla, de forma que podemos añadir más en el futuro si tener que duplicar los demás datos. También vamos a usar nuestra clave primaria para relacionar estos campos:

id
nombre
empresa
dirección_empresa
1
Pedro
LCT
Lacetel, Miramar, Habanal
2
Jorge
CGR
Cubagran, Bayamo, Granma


email_id
user_id
email
1
1
direccion@lacetel.com
2
1
economia@lacetel.com
3
2
direccion@cubagran.com
4
2
economia@cubagran.com


Hasta ahora bien, hemos creado tablas separadas y la clave primaria en la tabla usuarios, id, está relacionada ahora con la clave externa en la tabla emails, user_id. Esto está mejor. ¿Pero qué ocurre cuando queremos añadir otro empleado a la empresa LCT? ¿o 500 empleados? Por el momento es todo, en mi próximo artículo titulado Elementos Básicos sobre Normalización en Bases de Datos. Parte II, continuaremos el estudio de los niveles de F/N.

¿Te ha gustado este Post? Compártelo con tus amigos.

No hay comentarios:

Publicar un comentario

IconIconIcon