BBDD.Normalización.
Normalización de Bases de Datos.
El proceso de Normalización de bases de datos tiene como
objetivo optimizar técnicamente el diseño de las mismas.
Así, es posible minimizar redundancias y evitar anomalías
relacionadas con la manipulación de los datos.
La aplicación de estas medida no debe ser considerada como opcional, sino como un paso necesario para garantizar un diseño de base de datos de éxito.
El no normalizar pueden tener consecuencias como la anormal lentitud ejecución de los procesos, ineficiencia en las operaciones…etc.
Existen 6 formas normales:
Primera Forma Normal.
Una tabla se encuentra en primera forma normal si, y sólo si, todos los atributos contienen valores atómicos y que no existan grupos repetidos.
¿Valores Atómicos? Cada campo sólo debe tener un sólo valor, no puede existir un campo que tenga varios valores a la vez.
Nota. Como medium no me da forma de subrayar ni puntear, voy a cambiar la leyenda y marco en negrita el nombre de la columna cuando es clave principal y cursiva las claves externas para orientarnos.
Valores Atómicos.
Grupos repetidos dentro de una columna.ID Nombre Apellido Teléfono
123 Rachel Ingram 555-861-2026
545 James Wright 555-403-1659,555-776-4100
789 Cesar Dure 555-808-9633Grupos repetidos en columnas.ID Nombre Apellido Teléfono1 Teléfono2 Teléfono3.
123 Rachel Ingram 555-861-2026
545 James Wright 555-403-1659 555-776-4100
789 Cesar Dure 555-808-9633 557-888-4120
Como vemos en el ejemplo, el diseñador se da cuenta que cada cliente puede tener varios teléfonos y decide o meterlos en el mismo campo, creando valores múltiples o crea varios campos que van a contener teléfonos distintos. Esta última opción lo que implica que es la tabla pueda tener muchos valores nulos, ya que no todos los clientes tiene más de un teléfono.
La solución será aplicar la primera forma normal, es decir, creamos otra tabla con los grupos repetidos y llevándonos la clave principal de los clientes como clave externa para relacionarla. La clave primaria sería el teléfono y el id del propio cliente.
ID Nombre Apellido
123 Rachel Ingram
545 James Wright
789 Cesar Dure ID teléfono
123 555-861-2026
545 555-403-1659
545 555-776-4100
789 555-808-9633
789 557-888-4120
Segunda Forma Normal.
Una tabla está en segunda forma normal, si y sólo si está en la primera forma normal y además cada atributo que no sea clave, depende de forma funcional completa respecto a la clave principal.
¿Dependencia Funcional Completa?. Tenemos una tabla que contiene clave primaria dni, nombre, apellidos y fecha de nacimiento. Se dice que tiene dependencia funcional completa cuando necesitamos la clave principal para poder averiguar la información de los demás atributos. En este ejemplo, para saber el nombre, apellidos y fecha de nacimiento de un cliente necesitamos su clave principal para saber de quien se trata, por si sólo esos campos que no son clave no se puede averiguar nada. Veamos un ejemplo:
Empleado Habilidad Lugar de Trabajo
Jones Mecanografía Badajoz
Jones Taquigrafía Badajoz
Jones Tallado Badajoz
Bravo Limpieza Cáceres
Ellis Alquimia Cáceres
Ellis Malabarismo Cáceres
Harrison Limpieza Cáceres
En este caso la clave principal sería Empleado y Habilidad. Si nos fijamos bien, el único campo que no es clave es el Lugar de Trabajo y depende del empleado, es decir, que tiene dependencia funcional parcial, ya que no depende de las dos claves, sólo de Empleado.
Según la Segunda Forma Normal, debemos sacar en otra tabla esa parte de la clave y los atributos que dependan de él, en este caso quedaría de la siguiente forma:
Empleado Habilidad
Jones Mecanografía
Jones Taquigrafía
Jones Tallado
Bravo Limpieza
Ellis Alquimia
Ellis Malabarismo
Harrison Limpieza Empleado Lugar de Trabajo
Jones Badajoz
Bravo Cáceres
Ellis Cáceres
Harrison Cáceres
Tercera Forma Normal.
Una tabla se encuentra en la Tercera Forma Normal cuando si, y sólo si, se encuentra en la Segunda Forma Normal y además ningún atributo que no sea clave depende transitivamente de las clave de tabla.
¿Que es eso de transitivamente?. Esto ocurre cuando tenemos un atributo no clave que dependen funcionalmente de otro campo que también no es clave. Veamos un ejemplo:
Torneo Año Ganador Nacimiento
Indiana Invitational 1998 Al Fredrickson 21/07/1975
Cleveland Open 1999 Bob Albertson 28/09/1968
Des Moines Masters 1999 Al Fredrickson 21/07/1975
Indiana Invitational 1999 Chip Masterson 14/03/1977
En esta tabla la clave principal es Torneo y Año. Se dice que no está en Tercera Forma Normal cuando un campo no clave depende transitivamente de otro que tampoco es clave. En este caso si nos fijamos atentamente, la fecha de nacimiento no depende de la clave principal, si no el ganador y ambos campos no son clave. Eso es a lo que se le llama dependencia transitiva.
La Tercera Forma Normal dice que tenemos que sacar ese campo que tiene dependencia transitiva y crear una nueva tabla, incluyendo el campo por el que depende como clave primaria y externa. Quedaría de la siguiente forma:
Torneo Año Ganador
Indiana Invitational 1998 Al Fredrickson
Cleveland Open 1999 Bob Albertson
Des Moines Masters 1999 Al Fredrickson
Indiana Invitational 1999 Chip Masterson Ganador Nacimiento
Al Fredrickson 21/07/1975
Bob Albertson 28/09/1968
Chip Masterson 14/03/1977
Forma Normal Boyce-Codd.
Una tabla está en Forma Normal Boyce Codd si, y sólo si, está en la Segunda Forma Normal y además cada determinante es una clave candidata, es decir, no existen dependencias funcionales no triviales de los atributos que no sean un conjunto de la clave candidata.
No entiendo nada,¿Determinante? ¿Dependencias funcionales no triviales?. Esto se ve siempre mejor con un ejemplo;
Id_empleado id_departamento Id_asesor
1 2 1
1 3 2
2 4 3
3 2 1
- Un empleado puede trabajar en varios departamentos.
- Un asesor asesora a varios trabajadores.
- Sólo puede haber un asesor por departamento.
- La llave primaria es compuesta: id_empleado, id_departamento.
Si nos fijamos bien, existe una dependencia funcional de id_asesor respecto al departamento y resulta que id_asesor no es clave candidata. Esto produce una redundancia de id_asesor e id_departamento que se puede evitar. Veamos como se solucionaría:
Id_empleado Id_asesor
1 1
1 2
2 3
3 1Id_asesor Id_departamento
1 2
2 3
3 4
Cuarta Forma Normal.
Una tabla está en Cuarta Forma Normal cuando está en Forma Normal de Boyce Codd y toda dependencia multivaluada es una dependencia funcional.
Tenemos un tabla de Estudiantes en la que guardamos el número, el curso donde está matriculado y el deporte que practica.
Num Curso Deporte
10 Bases de Datos Baloncesto
10 Bases de Datos Natación
10 Bases de Datos Tenis
20 Física Baloncesto
20 Física Esgrima
Los atributos Curso y Deporte son dependientes multivalores de Num, es decir, cualquier valor de Num determina una serie de valores distintos de Curso y Deporte. Esto es lo que se le llama dependencia multivaluada.
Para solucionar toda esta redundancia lo que hay que hacer es separar esa dependencia multivaluada en otra tabla llevándonos la clave de la que depende como clave externa:
Num Curso
10 Bases de Datos
20 Física Num Deporte
10 Baloncesto
10 Natación
10 Tenis
20 Baloncesto
20 Esgrima
Quinta Forma Normal.
Este tipo de Forma Normal se emplea cuando una misma tabla tiene mucha información y pocos atributos o cuando tenemos muchos atributos y se hace muy complejo su manejo.
Proyección. Es cuando de un conjunto de atributos dados de una tabla sólo tomamos las columnas que nos interesa, formando un subconjunto de la tabla original.
Unión. Es lo que llamamos Join, es decir, registros relacionados con varias tablas.
Una tabla está en Quinta Forma Normal cuando si, y sólo si, esté en la Cuarta Forma Normal y además que cada dependencia de unión (join) es implicada por las claves candidatas.
Tenemos una tabla en la que guardamos los doctores, la aseguradora y la enfermedad que entra en el seguro.
Psiquiatra Asegurador Condición
Dr. Gómez Caser Ansiedad
Dr. Gómez Caser Depresión
Dr. Pereira Mapfre OCD
Dr. Pereira Mapfre Ansiedad
Dr. Pereira Mapfre Depresión
Dr. Matos Mapfre Esquizofrenia
Dr. Matos Caser Ansiedad
Dr. Matos Caser Demencia
Dr. Matos Axa Trastorno de conversión
Si nos fijamos en este ejemplo, tenemos una lista de doctores que atienden a pacientes con un tipo de enfermedad que es reembolsable por el seguro que tiene contratado.
Si ahora necesitáramos que el Dr Matos atendiera la condición OSD, tendríamos que añadir 3 registros más porque dicho doctor trabaja con 3 aseguradoras distintas. Pero tendríamos la incertidumbre de que no sabemos con seguridad si esa enfermedad entra en el seguro.
Psiquiatra Asegurador Condición
Dr. Gómez Caser Ansiedad
Dr. Gómez Caser Depresión
Dr. Pereira Mapfre OCD
Dr. Pereira Mapfre Ansiedad
Dr. Pereira Mapfre Depresión
Dr. Matos Mapfre Esquizofrenia
Dr. Matos Caser Ansiedad
Dr. Matos Caser Demencia
Dr. Matos Axa Trastorno de conversión
Añadir los 3 registros:
Dr. Matos Mapfre OSD
Dr. Matos Caser OSD
Dr. Matos Axa OSD
Esto provocaría mucha redundancia. Según la Quinta Forma Normal lo que tenemos que hacer es descomponer esa tabla de forma que muestra la misma información que la entidad original pero conservando la clave original principal:
Psiquiatra Condición
Dr. Gómez Ansiedad
Dr. Gómez Depresión
Dr. Pereira OSD
Dr. Pereira Ansiedad
Dr. Pereira Depresión
Dr. Matos Esquizofrenia
Dr. Matos Ansiedad
Dr. Matos Demencia
Dr. Matos Trastorno de conversiónPsiquiatra Asegurador
Dr. Gómez Caser
Dr. Pereira Mapfre
Dr. Matos Mapfre
Dr. Matos Caser
Dr. Matos Axa Asegurador Condición
Caser Ansiedad
Caser Depresión
Caser Demencia
Mapfre OSD
Mapfre Ansiedad
Mapfre Depresión
Mapfre Esquizofrenia
Axa Trastorno de conversión
Ahora si quisiéramos añadir el Dr Matos atiende el OSD, bastaría con sólo almacenar un registro en Psiquiatra Condición. De esta forma sabríamos que el Dr. Matos trabaja con Mapfre, Caser y Axa, pero el OSD sólo lo cubre Mapfre.
Psiquiatra Condición
Dr. Gómez Ansiedad
Dr. Gómez Depresión
Dr. Pereira OSD
Dr. Pereira Ansiedad
Dr. Pereira Depresión
Dr. Matos Esquizofrenia
Dr. Matos Ansiedad
Dr. Matos Demencia
Dr. Matos Trastorno de conversiónDr. Matos OSD