PROBLEMAS DE BASE DE DATOS: NORMALIZACION 13/07/2015
PROBLEMAS RESUELTOS DE NORMALIZACION
Aplicar las reglas de normalización los siguientes ejercicios.
EJEMPLO-1:
Esta es una base de datos de una pequeña biblioteca.
CodLibro Titulo Autor Editorial NombreLector FechaDev
1001 Variable compleja Murray Spiegel McGraw Hill Pérez Gómez, Juan 15/04/2005
1004 Visual Basic 5 E. Petroustsos Anaya Ríos Terán, Ana 17/04/2005
1005 Estadística Murray Spiegel McGraw Hill Roca, René 16/04/2005
Nancy Greenberg García Roque,
1006 Oracle University Oracle Corp. 20/04/2005
y Priya Nathan Luis
1007 Clipper 5.01 Ramalho McGraw Hill Pérez Gómez, Juan 18/04/2005
Normalizar la tabla de Biblioteca
SOLUCION
Primera Forma Normal (1NF):Esta tabla no cumple el requisito de la Primera Forma Normal
(1NF) de sólo tener campos atómicos, pues el nombre del lector es un campo que puede (y
conviene) descomponerse en apellido paterno, apellido materno y nombres. Tal como se muestra en
la siguiente tabla.
Es decir:
CodLibro Titulo Autor Editorial NombreLector FechaDev
1001 Variable compleja Murray Spiegel McGraw Hill Pérez Gómez, Juan 15/04/2005
1004 Visual Basic 5 E. Petroustsos Anaya Ríos Terán, Ana 17/04/2005
1005 Estadística Murray Spiegel McGraw Hill Roca, René 16/04/2005
Nancy Greenberg García Roque,
1006 Oracle University Oracle Corp. 20/04/2005
y Priya Nathan Luis
1007 Clipper 5.01 Ramalho McGraw Hill Pérez Gómez, Juan 18/04/2005
1
PROBLEMAS DE BASE DE DATOS: NORMALIZACION 13/07/2015
PRIMERA FORMA NORMAL: 1NF
CodLibro Titulo Autor Editorial Paterno Materno Nombres FechaDev
Variable
1001 Murray Spiegel McGraw Hill Pérez Gómez Juan 15/04/2005
compleja
1004 Visual Basic 5 E. Petroustsos Anaya Ríos Terán Ana 17/04/2005
1005 Estadística Murray Spiegel McGraw Hill Roca René 16/04/2005
1006 OracleUniversity NancyGreenberg Oracle Corp. García Roque Luis 20/04/2005
1006 OracleUniversity Priya Nathan Oracle Corp. García Roque Luis 20/04/2005
1007 Clipper 5.01 Ramalho McGraw Hill Pérez Gómez Juan 18/04/2005
Segunda Forma Normal (2NF):Pide que no existan dependencias parciales o dicho de otra
manera, todos los atributos no clave deben depender por completo de la clave primaria.
Actualmente en nuestra tabla tenemos varias dependencias parciales si consideramos como atributo
clave el código del libro.
Por ejemplo, el título es completamente identificado por el código del libro, pero el nombre del
lector en realidad no tiene dependencia de este código, por tanto estos datos deben ser trasladados a
otra tabla.
Es decir:
CodLibro Titulo Autor Editorial Paterno Materno Nombres FechaDev
Variable
1001 Murray Spiegel McGraw Hill Pérez Gómez Juan 15/04/2005
compleja
1004 Visual Basic 5 E. Petroustsos Anaya Ríos Terán Ana 17/04/2005
1005 Estadística Murray Spiegel McGraw Hill Roca René 16/04/2005
1006 OracleUniversity NancyGreenberg Oracle Corp. García Roque Luis 20/04/2005
1006 OracleUniversity Priya Nathan Oracle Corp. García Roque Luis 20/04/2005
1007 Clipper 5.01 Ramalho McGraw Hill Pérez Gómez Juan 18/04/2005
2
PROBLEMAS DE BASE DE DATOS: NORMALIZACION 13/07/2015
SEGUNDA FORMA NORMAL: 2NF
CodLibro Titulo Autor Editorial
1001 Variable compleja Murray Spiegel McGraw Hill
1004 Visual Basic 5 E. Petroustsos Anaya
1005 Estadística Murray Spiegel McGraw Hill
1006 Oracle University NancyGreenberg Oracle Corp.
1006 Oracle University Priya Nathan Oracle Corp.
1007 Clipper 5.01 Ramalho McGraw Hill
La nueva tabla sólo contendrá datos del lector.
CodLector Paterno Materno Nombres
501 Pérez Gómez Juan
502 Ríos Terán Ana
503 Roca René
504 García Roque Luis
Hemos creado una tabla para contener los datos del lector y también tuvimos que crear la
columna CodLector para identificar unívocamente a cada uno. Sin embargo, esta nueva disposición
de la base de datos necesita que exista otra tabla para mantener la información de qué libros están
prestados a qué lectores. Esta tabla se muestra a continuación:
CodLibro CodLector FechaDev
1001 501 15/04/2005
1004 502 17/04/2005
1005 503 16/04/2005
1006 504 20/04/2005
1007 501 18/04/2005
Tercera Forma Normal (3NF):La relación debe estar en 2NF y además los atributos no clave
deben ser mutuamente independientes y dependientes por completo de la clave primaria. Esto
significa que las columnas en la tabla deben contener solamente información sobre la entidad
definida por la clave primaria y, por tanto, las columnas en la tabla deben contener datos acerca de
una sola cosa.
En nuestro ejemplo en 2NF, la primera tablaconserva información acerca del libro, los autores y
editoriales, por lo que debemos crear nuevas tablas para satisfacer los requisitos de 3NF.
3
PROBLEMAS DE BASE DE DATOS: NORMALIZACION 13/07/2015
TERCERA FORMA NORMAL: 3NF
CodLibro Titulo CodAutor Autor CodEditorial Editorial
1001 Variable compleja 801 Murray Spiegel 901 McGraw Hill
1004 Visual Basic 5 802 E. Petroustsos 902 Anaya
1005 Estadística 803 Nancy Greenberg 903 Oracle Corp.
1006 Oracle University 804 Priya Nathan
1007 Clipper 5.01 806 Ramalho
Aunque hemos creado nuevas tablas para que cada una tenga sólo información acerca de una
entidad, también hemos perdido la información acerca de qué autor ha escrito qué libro y las
editoriales correspondientes, por lo que debemos crear otras tablas que relacionen cada libro con sus
autores y editoriales
CodLibro codAutor CodLibro codEditorial
1001 801 1001 901
1004 802 1004 902
1005 801 1005 901
1006 803 1006 903
1006 804 1007 901
1007 806
Y el resto de las tablas no necesitan modificación.
CodLector Paterno Materno Nombres CodLibro CodLector FechaDev
501 Pérez Gómez Juan 1001 501 15/04/2005
502 Ríos Terán Ana 1004 502 17/04/2005
503 Roca René 1005 503 16/04/2005
504 García Roque Luis 1006 504 20/04/2005
1007 501 18/04/2005
4
PROBLEMAS DE BASE DE DATOS: NORMALIZACION 13/07/2015
EJEMPLO-2:
La presente tabla representa una orden de compra de una tienda en mediana escala de venta.
Id_orden Fecha Id_cliente Nom_cliente Estado Num_art nom_art cant Precio
2301 23/02/11 101 Martin Caracas 3786 Red 3 35,00
2301 23/02/11 101 Martin Caracas 4011 Raqueta 6 65,00
2301 23/02/11 101 Martin Caracas 9132 Paq-3 8 4,75
2302 25/02/11 107 Herman Coro 5794 Paq-6 4 5,00
2303 27/02/11 110 Pedro Maracay 4011 Raqueta 2 65,00
2303 27/02/11 110 Pedro Maracay 3141 Funda 2 10,00
Desarrollando:
PRIMERA FORMAL NORMAL (1FN)
Id_orden Fecha Id_cliente Nom_cliente Estado Num_art nom_art cant Precio
2301 23/02/11 101 Martin Caracas 3786 Red 3 35,00
2301 23/02/11 101 Martin Caracas 4011 Raqueta 6 65,00
2301 23/02/11 101 Martin Caracas 9132 Paq-3 8 4,75
2302 25/02/11 107 Herman Coro 5794 Paq-6 4 5,00
2303 27/02/11 110 Pedro Maracay 4011 Raqueta 2 65,00
2303 27/02/11 110 Pedro Maracay 3141 Funda 2 10,00
Al examinar estos registros, podemos darnos cuenta que contienen un grupo repetido para
NUM_ART, NOM_ART, CANT y PRECIO. La 1FN prohíbe los grupos repetidos, por lo tanto
tenemos que convertir a la primera forma normal. Los pasos a seguir son:
Tenemos que eliminar los grupos repetidos.
Tenemos que crear una nueva tabla con la PK de la tabla base y el grupo repetido.
Los registros quedan ahora conformados en dos tablas que llamaremos ORDENES y
ARTICULOS_ORDENES
ordenes (id_orden, fecha, id_cliente, nom_cliente, estado)
Articulos_ordenes (id_orden, num_art, nom_art, cant, precio)
TABLA ORDEN
Id_orden Fecha Id_cliente Nom_cliente Estado
2301 23/02/11 101 Martin Caracas
2302 25/02/11 107 Herman Coro
2303 27/02/11 110 Pedro Maracay
5
PROBLEMAS DE BASE DE DATOS: NORMALIZACION 13/07/2015
TABLA ARTICULOS_ORDENES
Id_orden Num_art nom_art cant Precio
2301 3786 Red 3 35,00
2301 4011 Raqueta 6 65,00
2301 9132 Paq-3 8 4,75
2302 5794 Paq-6 4 5,00
2303 4011 Raqueta 2 65,00
2303 3141 Funda 2 10,00
SEGUNDA FORMAL NORMAL (2FN)
Ahora procederemos a aplicar la segunda formal normal, es decir, tenemos que eliminar
cualquier columna no llaveque no dependa de la llave primaria de la tabla.
Los pasos a seguir son:
Determinar cuáles columnas que no son llave no dependen de la llave primaria de la tabla.
Eliminar esas columnas de la tabla base.
Crear una segunda tabla con esas columnas y la(s) columna(s) de la PK de la cual dependen.
La tabla ORDENES está en 2FN. Cualquier valor único de ID_ORDEN determina un sólo
valor para cada columna. Por lo tanto, todas las columnas son dependientes de la llave primaria
ID_ORDEN.
Por su parte, la tabla ARTICULOS_ORDENES no se encuentra en 2FN ya que las columnas
PRECIO y NOM_ART son dependientes de NUM_ART, pero no son dependientes de
ID_ORDEN. Lo que haremos a continuación es eliminar estas columnas de la tabla
ARTICULOS_ORDENES y crear una tabla ARTICULOS con dichas columnas y la llave
primaria de la que dependen.
Es decir observamos la tabla:
TABLA ARTICULOS_ORDENES
Id_orden Num_art nom_art cant Precio
2301 3786 Red 3 35,00
2301 4011 Raqueta 6 65,00
2301 9132 Paq-3 8 4,75
2302 5794 Paq-6 4 5,00
2303 4011 Raqueta 2 65,00
2303 3141 Funda 2 10,00
Las tablas quedan ahora de la siguiente manera.
Articulos_ordenes (id_orden, num_art, cant) Articulos( num_art, nom_art, precio)
Articulos_ordenes Articulos
Id_orden Num_art cant Num_art nom_art Precio
2301 3786 3 3786 Red 35,00
2301 4011 6 4011 Raqueta 65,00
2301 9132 8 9132 Paq-3 4,75
2302 5794 4 5794 Paq-6 5,00
2303 4011 2 3141 Funda 10,00
2303 3141 2
6
PROBLEMAS DE BASE DE DATOS: NORMALIZACION 13/07/2015
Se incluye a la tabla: Ordenes
Id_orden Fecha Id_cliente Nom_cliente Estado
2301 23/02/11 101 Martin Caracas
2302 25/02/11 107 Herman Coro
2303 27/02/11 110 Pedro Maracay
TERCERA FORMAL NORMAL (3FN)
La tercera forma normal nos dice que tenemos que eliminar cualquier columna no llave que
sea dependiente de otra columna no llave.
Los pasos a seguir son:
Determinar las columnas que son dependientes de otra columna no llave.
Eliminar esas columnas de la tabla base.
Crear una segunda tabla con esas columnas y con la columna no llave de la cual son
dependientes.
Al observar las tablas que hemos creado, nos damos cuenta que tanto la tabla ARTICULOS,
como la tabla ARTICULOS_ORDENES se encuentran en 3FN. Sin embargo la tabla
ORDENES no lo está, ya que NOM_CLIENTE y ESTADO son dependientes de ID_CLIENTE,
y esta columna no es la llave primaria.
Observemos dicha tabla:
TABLA ORDENES
Id_orden Fecha Id_cliente Nom_cliente Estado
2301 23/02/11 101 Martin Caracas
2302 25/02/11 107 Herman Coro
2303 27/02/11 110 Pedro Maracay
Para normalizar esta tabla, moveremos las columnas no llave y la columna llave de la cual
dependen dentro de una nueva tabla CLIENTES. Las nuevas tablas CLIENTES y ORDENES se
muestran a continuación.
ordenes(id_orden, fecha, id_cliente)
Ordenes
Id_orden Fecha Id_cliente
2301 23/02/11 101
2302 25/02/11 107
2303 27/02/11 110
7
PROBLEMAS DE BASE DE DATOS: NORMALIZACION 13/07/2015
Le incluimos las otras tablas que son: Clientes(id_cliente, nom_cliente, estado
Articulos_ordenes (id_orden, num_art, cant) Clientes
Id_cliente Nom_cliente Estado
Articulos_ordenes 101 Martin Caracas
Id_orden Num_art cant 107 Herman Coro
2301 3786 3 110 Pedro Maracay
2301 4011 6
2301 9132 8
2302 5794 4
2303 4011 2
2303 3141 2 Articulos( num_art, nom_art, precio)
Articulos
Num_art nom_art Precio
3786 Red 35,00
4011 Raqueta 65,00
9132 Paq-3 4,75
5794 Paq-6 5,00
3141 Funda 10,00
Por lo tanto la base de datos queda de la siguiente manera:
ordenes(id_orden, fecha, id_cliente)
Clientes (id_cliente, nom_cliente, estado)
Articulos( num_art, nom_art, precio)
Articulos_ordenes (id_orden, num_art, cant)
Es decir con cuatro tablas.