UNIVERSIDAD YACAMBU
ESPECIALIZACION GERENCIA MENCION REDES Y TELECOMUNICACIONES
ANALISIS Y DISENO DE SISTEMAS
FORO. NORMALIZACION BASE DE DATOS
ING. CESAR R. GAVIDIA R.
Qué es la normalización
Normalización
es un conjunto de reglas que sirven para ayudar a los diseñadores a desarrollar
un esquema que minimice los problemas de lógica. Cada regla está basada en la
que le antecede. La normalización se adoptó porque el viejo estilo de poner
todos los datos en un solo lugar, como un archivo o una tabla de la base de
datos, era ineficiente y conducía a errores de lógica cuando se trataba de
manipular los datos. Por ejemplo, vea la base de datos MiTienda. Si almacena
todos los datos en la tabla Clientes, ésta podría verse como se muestra a
continuación:
Clientes
ID_Cliente Nombre
Apellidos
Nombre_Producto1 Costo_Producto1
Imagen_Producto1
Nombre_Producto2 Costo_Producto2
Imagen_Producto2 Fecha_Pedido
Cantidad_Pedido
Nombre_Cia_Envios
La tabla se ha descrito de
manera abreviada pero aun así representa la idea general.
¿Cómo podría añadir un nuevo cliente en su tabla
Clientes? Debería añadir un producto y un pedido también. ¿Qué tal si quisiera
emitir un informe de todos los productos que vende? No podría separar
fácilmente los productos de los clientes con una simple instrucción SQL. Lo
bello de las bases de datos relacionales, si están bien diseñadas, es que puede
hacer esto fácilmente.
La normalización también hace las cosas fáciles de
entender. Los seres humanos tenemos la tendencia de simplificar las cosas al
máximo. Lo hacemos con casi todo desde los animales hasta con los automóviles.
Vemos una imagen de gran tamaño y la hacemos menos compleja agrupando cosas
similares juntas. Las guías que la normalización provee crean el marco de
referencia para simplificar la estructura. En su base de datos de muestra es
fácil detectar que usted tiene tres diferentes grupos: clientes, productos y
pedidos. Si sigue las guías de la normalización, podría crear las tablas
basándose en estos grupos.
El proceso de normalización tiene un nombre y una
serie de reglas para cada fase. Esto puede parecer un poco confuso al principio,
pero poco a poco irá entendiendo el proceso, así como las razones para hacerlo
de esta manera. A la mayoría de la gente le encantan las hojas de cálculo por
la forma en la que manejan sus datos. El tiempo que le lleve reconfigurar su
esquema para ajustarlo al proceso de normalización, siempre será bien
Iinvertido. Al fin y al cabo, esto le tomará menos tiempo que el que tendría
que invertir, para cortar y pegar sus columnas de datos para generar el infomle
que quiere su jefe.
Otra ventaja de la normalización de su base de
datos es el consumo de espacio. Una base de datos normalizada puede ocupar
menos espacio en disco que una no normalizada. Hay menos repetición de datos,
lo que tiene como consecuencia un mucho menor uso de espacio en disco.
Grados
de normalización
Existen básicamente tres niveles de normalización:
Primera Forma Normal (1NF), Segunda Forma Normal (2NF) y Tercera Forma Normal
(3NF). Cada una de estas formas tiene sus propias reglas. Cuando una base de
datos se conforma a un nivel, se considera normalizada a esa forma de
normalización. Por ejemplo, supongamos que su base de datos cumple con todas
las reglas del segundo nivel de normalización. Se considera que está en la
Segunda Forma Normal. No siempre es una buena idea tener una base de datos
conformada en el nivel más alto de normalización. Puede llevar aun nivel de
complejidad que pudiera ser evitado si estuviera en un nivel más bajo de
normalización.
Primera Forma Normal
La
regla de la Primera Forma Normal establece que las columnas repetidas deben
eliminarse y colocarse en tablas separadas. Ésta es una regla muy fácil de
seguir. Observe el esquema de la tabla Clientes de la base de datos.
Clientes
ID Cliente
Nombre
Apellidos
Nombre_Producto1
Costo_Producto1
Imagen_Producto1
Nombre_Producto2
Costo_Producto2
Imagen_Producto2
Fecha_Pedido
Cantidad_Pedido
Nombre Cia Envios
--
La tabla tiene varias columnas repetidas. Éstas se refieren principalmente a
los productos. De acuerdo con la regla, debe eliminar las columnas repetidas y
crearles su propia tabla.
Eliminación de datos repetidos en una base de datos
Clientes Pedidos
ID_Clientes Nombre_Productos
Nombre Costo_Producto
Apellidos Imagen_Producto
Dirección
Numero_Pedido
Fecha_Pedido
Cantidad_Pedido
Clave_Cia_Envíos
Nombre_Ci_ Envíos
Ahora tiene dos tablas. Pero todavía hay un problema. No hay forma de
relacionar los datos de la tabla original con los de la nueva tabla. Para
hacerlo, debe añadir un campo clave a la segunda tabla de forma que se
establezca la relación. Añada a la tabla Productos una clave primaria que se
llame ID_Producto y añada una clave a la tabla Clientes que la relacione con la
tabla Productos. El campo ID_Producto es el candidato ideal.
Primera Forma Normal
Clientes Pedidos
ID_Productos ID_Productos
ID_Clientes Nombre_Productos
Nombre Costo_Producto
Apellidos Imagen_Producto
Dirección
Numero_Pedido
Fecha_Pedido
Cantidad_Pedido
Clave_Cia_Envios
--
Así, se ha establecido una relación uno a varios. Ésta representa lo que la
base de datos estará haciendo en la vida real. El cliente tendrá muchos
productos que podrá comprar, sin importar cuántos otros clientes quieran
comprarlos también. Además, el cliente necesitará haber pedido un producto para
ser un cliente. Usted ya no está obligado a añadir un cliente cada vez que
añade un nuevo producto a su inventario.
Poner
la base de datos en la Primera Forma Normal resuelve el problema de los
encabezados de columna múltiples. Muy a menudo, los diseñadores de bases de
datos inexpertos harán algo similar a la tabla no normalizada. Una y otra vez,
crearán columnas que representen los mismos datos. En una empresa de servicios
de electricidad, había una base de datos para el control de refacciones de una
planta nuclear. La tabla de su base de datos, la cual contenía los números de
parte de las refacciones, tenía una columna repetida más de treinta veces. Cada
vez que una nueva parte se tenía que dar de alta, se creaba una nueva columna
para almacenar la información. Obviamente, el diseño de la base de datos era
bastante pobre y, por lo mismo, resultaba una pesadilla para sus
programadores/administradores.
La normalización ayuda a clarificar la base de datos ya organizarla en partes
más pequeñas y más fáciles de entender. En lugar de tener que entender una
tabla gigantesca y monolítica que tiene muchos diferentes aspectos, usted sólo
tiene que entender objetos pequeños y más tangibles, así como las relaciones
que guardan con otros objetos también pequeños. No es necesario mencionar que
un mejor entendimiento del funcionamiento de su base de datos conducirá aun
mejor aprovechamiento de sus activos.
Segunda Forma Normal
La regla de la Segunda Forma
Normal establece que todas las dependencias parciales se deben eliminar y
separar dentro de sus propias tablas. Una depen dencia parcial es un término
que describe a aquellos datos que no dependen de la clave de la tabla para
identificarlos. En la base de datos de muestra, la información de pedidos está
en cada uno de los registros. Sería mucho más simple utilizar únicamente el
número del pedido. El resto de la información podría residir en su propia
tabla. Una vez que haya organizado la información de pedidos.
Eliminación de las dependencias parciales -Segunda Forma Normal
Clientes Pedidos Productos
ID_Productos ID_Productos ID_Producto
ID_Clientes Nombre_Productos Fecha_Compra
Nombre Cantidad_Pedido Costos_Productos
Apellidos Imagen_Producto
Dirección
Numero_Pedido
Nombre_Cia_Envios
De nuevo, al organizar el esquema de esta forma puede reflejar el mundo real en
su base de datos. Tendría que hacer algunos cambios en sus reglas del negocio
para que esto fuera aplicable, pero para ilustrar la normalización, así está
bien.
Una de las mayores desventajas de la normalización es el tiempo que lleva
hacerlo. La mayoría de la gente está demasiado ocupada, y emplear tiempo para
asegurarse de que sus datos están normalizados cuando todo funciona más o menos
bien, parece ser un desperdicio de tiempo. Pero no es así. Usted tendrá que
emplear más tiempo arreglando una base de datos no normalizada que el que
emplearía en una normalizada.
Al haber alcanzado la Segunda Forma Normal, usted puede disfrutar de algunas de
las ventajas de las bases de datos relacionales. Por ejemplo, puede añadir
nuevas columnas a la tabla Clientes sin afectar a las tablas Productos y
Pedidos. Lo mismo aplica para las otras tablas. Alcanzar este nivel de
normalización permite que los datos se acomoden de una manera natural dentro de
los límites esperados.
Una vez que ha alcanzado el nivel de la Segunda Forma Normal, se han controlado
la mayoría de los problemas de lógica. Puede insertar un registro sin un exceso
de datos en la mayoría de las tablas. Observando un poco más de cerca la tabla
Clientes, vemos la columna Nombre_Cia_Envios. Ésta no es dependiente del
cliente. El siguiente nivel de normalización explicará cómo solucionar esto.
Tercera Forma Normal
La
regla de la Tercera Forma Normal señala que hay que eliminar y separar
cualquier dato que no sea clave. El valor de esta columna debe depender de la
clave. Todos los valores deben identificarse únicamente por la clave. En la
base de datos de muestra, la tabla Clientes contiene la columna
Nombre_Cia_Envios, la cual no se identifica únicamente por la clave. Podría
separar estos datos de la tabla y ponerlos en una tabla aparte.
Eliminación
de los datos que no son claves para la Tercera Forma Normal
Clientes Productos PedidoMaestro PedidoDetallado Cias_Envios
ID_cliente ID_Producto ID_Pedido ID_PedidoDetallado ID_Cia_Envios
ID_Producto Nombre_Producto Fecha_Pedido ID_Pedido Nombre_Cia_Envios.
Numero_Pedido Costos_Productos Cantidad_Pedidos Fecha_Pedido
ID_Cia_Envios Foto_Producto Cantidad_Pedido
Nombre
Apellidos
Dirección
Ahora todas sus tablas están en la Tercera Forma Normal. Esto le da más
flexibilidad y previene errores de lógica cuando inserta o borra registros.
Cada columna en la tabla está identificada de manera única por la clave, y no
hay datos repetidos. Esto provee un esquema limpio y elegante, que es fácil de
trabajar y expandir.
Qué tan lejos debe llevar la normalización
La siguiente decisión es ¿qué tan lejos debe llevar la normalización? La
normalización es una ciencia subjetiva. Determinar las necesidades de
simplificación depende de usted. Si su base de datos va a proveer información
aun solo usuario para un propósito simple y existen pocas posibilidades de
expansión, normalizar sus datos hasta la 3FN sea quizá algo extremoso. Las
reglas de normalización existen como guías para crear tablas que sean fáciles
de manejar, así como flexibles y eficientes.
A veces puede ocurrir que normalizar sus datos hasta el nivel más alto no tenga
sentido. Por ejemplo, suponga que añade una columna extra para la dirección en
su base de datos. Es muy normal tener dos líneas para la dirección. El esquema
de la tabla podría verse como se muestra a continuación:
ID_Cliente
Nombre
Apellidos
Direccion1
Direccion2
De acuerdo con las reglas, si aplica la Primera Forma Normal, la columna de
dirección debería sacarse de esta tabla y reemplazarse con la clave de una
nueva tabla. El resultado de este esquema se muestra a continuación:
ID_Cliente ID_Dirección
Nombre ID_Cliente
Apellidos Dirección
La base de datos ahora cumple con la Primera Forma Normal. Los clientes pueden
tener más de una dirección. El problema aquí es que usted ha complicado
demasiado una idea simple, por tratar de seguir las reglas de normalización. En
el ejemplo mostrado, la segunda dirección es totalmente opcional. Está ahí sólo
para colectar información que pudiera utilizarse como información de contacto.
No hay necesidad de partir la tabla en dos y forzar las reglas de la normalización.
En esta instancia, el exceso de normalización frustra el propósito para el que
se utilizan los datos. Añade, de manera innecesaria, un nivel más de
complejidad. Una buena forma de determinar si está llevando demasiado lejos su
normalización, es ver el número de tablas que tiene. Un número grande de tablas
pudiera indicar que está normalizando demasiado. Observe su esquema.
¿Está dividiendo tablas sólo para seguir las reglas o estas divisiones son en
verdad prácticas? Éstas son el tipo de cosas que usted, el diseñador de la base
de datos, necesita decidir. La experiencia y el sentido común lo pueden
auxiliar para tomar la decisión correcta. La normalización no es una ciencia
exacta. Es subjetiva.
Existen seis niveles más de normalización que no se han discutido aquí. Ellos
son Forma Normal Boyce-Codd, Cuarta Forma Normal (4NF), Quinta Forma Normal
(5NF) o Forma Normal de Proyección-Unión, Forma Normal de Proyección-Unión
Fuerte, Forma Normal de Proyección-Unión Extra Fuerte y Forma Normal de Clave
de Dominio. Estas formas de normalización pueden llevar las cosas más allá de
lo que necesita. Éstas existen para hacer una base de datos realmente
relacional. Tienen que ver principalmente con dependencias múltiples y claves
relacionales.
En resumen
La normalización es una técnica que se utiliza para crear relaciones lógicas
apropiadas entre tablas de una base de datos.
Ayuda a prevenir errores lógicos en la manipulación de datos. La normalización
facilita también agregar nuevas columnas sin romper el esquema actual ni las
relaciones.
Existen
varios niveles de normalización: Primera Forma Normal, Segunda Forma Normal,
Tercera Forma Normal, Forma Normal Boyce-Codd, Cuarta Forma Normal, Quinta
Forma Normal o Forma Normal de Proyección-Unión, Forma Normal de
Proyección-Unión Fuerte, Forma Normal de Proyección-Unión Extra Fuerte y Forma
Normal de Clave de Dominio. Cada nuevo nivel o forma lo acerca más a hacer su
base de datos verdaderamente relacional.
Se discutieron las primeras tres formas. Éstas proveen suficiente nivel de
normalización para cumplir con las necesidades de la mayoría de las bases de
datos.
Normalizar demasiado puede conducir a tener una base de datos ineficiente y
hacer a su esquema demasiado complejo para trabajar. Un balance apropiado de
sentido común y
práctico puede ayudarle a decidir cuándo normalizar.
INFOGRAFIA
http://es.wikipedia.org/wiki/Normalizaci%C3%B3n_de_una_base_de_datos
http://www.ciberaula.com/curso/disenobasesdatos/
http://www.mundotutoriales.com/tutorial_normalizacion_de_bases_de_datos-mdtutorial328281.htm
http://www.mysql-hispano.org/page.php?id=16
http://www.trucostecnicos.com/trucos/ver.php?id_art=278
http://www.monografias.com/trabajos5/norbad/norbad.shtml
http://bulma.net/body.phtml?nIdNoticia=483
http://www.microsoft.com/spanish/msdn/articulos/archivo/291102/voices/odc_FMSNormalization.asp