A veces la generación de las tablas en una base de datos se realiza de una manera no óptima que genera posteriormente una ralentización en las consultas. Además, podemos encontrarnos que si las tablas no están bien organizadas los datos pueden aparecer duplicados, generando que la actualización no se realice en todos los registros donde aparece una determinada información y se produzcan incompatibilidades e inconsistencias de datos.
Para prevenir este problema, lo ideal es que en el diseño de los datos se utilicen una serie de reglas que sirven para ayudar a los diseñadores de bases de datos a desarrollar un esquema que minimice los problemas de lógica: esto es la normalización.
Existen 5 formas normales sucesivas, de las que aquí vamos a ver hasta la tercera de ellas. La mejor forma de conocerlas es aplicarlas a una tabla concreta. La que vamos a utilizar en este caso de uso es la tabla inicial de gestión de una biblioteca informática:
Codigo |
Titulo |
Autor |
Editorial |
ISBN |
Nombre_lector |
Cod_lector |
F_dev |
1002 |
Estadística |
Murray Spiegel |
McGraw Hill |
1585-4544-5655 |
Campos Lara, Juan |
JCL27 |
25/07/22 |
1002 |
Estadística |
Murray Spiegel |
McGraw Hill |
1585-4544-5655 |
Moreno Caro, Mercedes |
MMC04 |
15/06/22 |
1004 |
Bases de Datos |
Ramalho |
Alfaguara |
5967-4978-5311 |
Moreno Caro, Mercedes |
MMC04 |
19/03/22 |
1004 |
Bases de Datos |
Ramalho |
Alfaguara |
5967-4978-5311 |
Campos Lara, Juan |
JCL27 |
10/01/22 |
1005 |
Algoritmos |
Kenneth Brown |
RA-MA |
4894-0560-5542 |
López Ayala, Pedro |
PLA14 |
04/02/22 |
1007 |
Oracle |
Sarah Connor |
McGraw Hill |
1700-8462-9869 |
López Ayala, Pedro |
PLA14 |
30/08/22 |
1008 |
SQL |
Meredith Goldberg |
RA-MA |
4477-4754-4455 |
Campos Lara, Juan |
JCL27 |
14/09/22 |
Primera forma normal - 1FN
Para que una tabla esté en primera forma normal (1FN) debe cumplir:
- Que sus campos tengan valores atómicos: que en lo posible estén formados por valores no compuestos. Por ejemplo: si en un campo tenemos nombre y apellidos, conviene dividir en nombre, primer apellido y segundo apellido.
- Que para un valor de clave dado no haya conjuntos de valores repetidos.
Para transformar una tabla en primera forma normal, vamos a ver los pasos aplicados a nuestra tabla de trabajo.
Separamos los campos no atómicos. Así, la columna anterior llamada Nombre_lector se convertirá en 3 columnas. Podéis ver aquí el extracto de la tabla principal:
Nom_lector |
Ape1_lector
|
Ape2_lector
|
Juan |
Campos
|
Lara
|
Mercedes |
Moreno |
Caro |
Mercedes |
Moreno |
Caro |
Juan |
Campos |
Lara |
Pedro |
López |
Ayala |
Pedro |
López |
Ayala |
Juan |
Campos |
Lara |
Separamos en tablas aparte los campos con valores repetidos para un mismo valor de clave:
Tabla BIBLIOTECA
Codigo |
Título |
Autor |
Editorial |
ISBN |
1002 |
Estadística |
Murray Spiegel |
McGraw Hill |
1585-4544-5655 |
1004 |
Bases de Datos |
Ramalho |
Alfaguara |
5967-4978-5311 |
1005 |
Algoritmos |
Kenneth Brown |
RA-MA |
4894-0560-5542 |
1007 |
Oracle |
Sarah Connor |
McGraw Hill |
1700-8462-9869 |
1008 |
SQL |
Meredith Goldberg |
RA-MA |
4477-4754-4455 |
Tabla PRESTAMOS
Codigo
|
Nom_lector |
Ape1_lector
|
Ape2_lector
|
Cod_lector
|
Devolucion
|
1002
|
Juan |
Campos
|
Lara
|
JCL27 |
25/07/22 |
1002
|
Mercedes |
Moreno |
Caro |
MMC04 |
15/06/22 |
1004
|
Mercedes |
Moreno |
Caro |
MMC04 |
19/03/22 |
1004
|
Juan |
Campos |
Lara |
JCL27 |
10/01/22 |
1005
|
Pedro |
López |
Ayala |
PLA14 |
04/02/22 |
1007
|
Pedro |
López |
Ayala |
PLA14 |
30/08/22 |
1008
|
Juan |
Campos |
Lara |
JCL27 |
14/09/22 |
Segunda forma normal - 2FN
Para que una tabla esté en segunda forma normal (2FN) debe cumplir:
- Estar en primera forma normal.
- Que todos los atributos que no forman parte de la clave dependan de forma completa de ella.
Seguimos transformando nuestro ejemplo, ahora a segunda forma normal. En nuestras tablas del ejemplo en 1FN podemos comprobar que si el segundo apellido de Mercedes era incorrecto, y el cambio no es aplicado en las dos filas, sino en una sola entramos en un conflicto de datos. Para ello se utiliza la 2FN.
Determinamos qué columnas no clave no dependen de la clave primaria al completo: Entonces vemos que debemos trabajar sobre la tabla PRESTAMOS, cuya clave principal está formada por los campos Codigo y Cod_lector. Podemos comprobar las columnas de nombre y apellidos del lector dependen solamente de Cod_lector, y no dependen de Codigo. Luego estos campos no dependen de la clave completa:
Codigo
|
Nom_lector |
Ape1_lector
|
Ape2_lector
|
Cod_lector
|
Devolucion
|
1002
|
Juan |
Campos
|
Lara
|
JCL27 |
25/07/22 |
1002
|
Mercedes |
Moreno |
Caro |
MMC04 |
15/06/22 |
1004
|
Mercedes |
Moreno |
Caro |
MMC04 |
19/03/22 |
1004
|
Juan |
Campos |
Lara |
JCL27 |
10/01/22 |
1005
|
Pedro |
López |
Ayala |
PLA14 |
04/02/22 |
1007
|
Pedro |
López |
Ayala |
PLA14 |
30/08/22 |
1008
|
Juan |
Campos |
Lara |
JCL27 |
14/09/22 |
Lo que haremos a continuación es eliminar estas columnas de la tabla PRESTAMOS y crear una tabla LECTORES con dichas columnas y la llave primaria de la que dependen. Quedan entonces las tablas siguientes:
Tabla LECTORES
Cod_lector
|
Nom_lector |
Ape1_lector
|
Ape2_lector
|
JCL27 |
Juan |
Campos
|
Lara
|
MMC04 |
Mercedes |
Moreno |
Caro |
PLA14 |
Pedro |
López |
Ayala |
Tabla
PRESTAMOS
Codigo |
Cod_lector |
F_dev |
1002 |
JCL27 |
25/07/22 |
1002 |
MMC04 |
15/06/22 |
1004 |
MMC04 |
19/03/22 |
1004 |
JCL27 |
10/01/22 |
1005 |
PLA14 |
04/02/22 |
1007 |
PLA14 |
30/08/22 |
1008 |
JCL27 |
14/09/22 |
Tercera forma normal - 3FN
Para que una tabla esté en tercera forma normal (3FN) debe cumplir:
- Estar en segunda forma normal.
- No debe haber atributos no clave que dependan de otros atributos no primos (que no pertenecen a la clave).
Seguimos transformando nuestro ejemplo, ahora a tercera forma normal:
Determinamos las columnas que son dependientes de otra columna no clave: Al observar las tablas que hemos creado en el ejemplo, nos damos cuenta que tanto la tabla LECTORES, como la tabla PRESTAMOS se encuentran en 3FN. Sin embargo, la tabla BIBLIOTECA no lo está, ya que TITULO, EDITORIAL Y AUTOR son dependientes de ISBN, y esta columna no es la llave primaria:
Codigo |
Título |
Autor |
Editorial |
ISBN |
1002 |
Estadística |
Murray Spiegel |
McGraw Hill |
1585-4544-5655 |
1004 |
Bases de Datos |
Ramalho |
Alfaguara |
5967-4978-5311 |
1005 |
Algoritmos |
Kenneth Brown |
RA-MA |
4894-0560-5542 |
1007 |
Oracle |
Sarah Connor |
McGraw Hill |
1700-8462-9869 |
1008 |
SQL |
Meredith Goldberg |
RA-MA |
4477-4754-4455 |
Para normalizar esta tabla, moveremos las columnas no clave y la columna clave de la cual dependen dentro de una nueva tabla EJEMPLARES. Las nuevas tablas BIBLIOTECA y EJEMPLARES se muestran a continuación:
Tabla BIBLIOTECA
Codigo |
ISBN |
1002 |
1585-4544-5655 |
1004 |
5967-4978-5311 |
1005 |
4894-0560-5542 |
1007 |
1700-8462-9869 |
1008 |
4477-4754-4455 |
Tabla EJEMPLARES
ISBN |
Título |
Autor |
Editorial |
1585-4544-5655 |
Estadística |
Murray Spiegel |
McGraw Hill |
5967-4978-5311 |
Bases de Datos |
Ramalho |
Alfaguara |
4894-0560-5542 |
Algoritmos |
Kenneth Brown |
RA-MA |
1700-8462-9869 |
Oracle |
Sarah Connor |
McGraw Hill |
4477-4754-4455 |
SQL |
Meredith Goldberg |
RA-MA |