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.
No hay comentarios:
Publicar un comentario