A través del siguiente
ejercicio se intenta afirmar los conocimientos de normalización con un ejemplo
simplificado de una base de datos para 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
|
1006
|
Oracle University
|
Nancy
Greenberg y 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
|
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.
1NF
CodLibro
|
Titulo
|
Autor
|
Editorial
|
Paterno
|
Materno
|
Nombres
|
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
|
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
|
Como se puede ver, hay
cierta redundancia característica de 1NF.
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.
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
|
Para la 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.
También recordemos que dijimos que 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 tabla conserva información acerca del libro, los autores y
editoriales, por lo que debemos crear nuevas tablas para satisfacer los
requisitos de 3NF.
3NF
CodLibro
|
Titulo
|
1001
|
Variable compleja
|
1004
|
Visual Basic 5
|
1005
|
Estadística
|
1006
|
Oracle University
|
1007
|
Clipper 5.01
|
CodAutor
|
Autor
|
801
|
Murray Spiegel
|
802
|
E. Petroustsos
|
803
|
Nancy Greenberg
|
804
|
Priya Nathan
|
806
|
Ramalho
|
CodEditorial
|
Editorial
|
901
|
McGraw Hill
|
902
|
Anaya
|
903
|
Oracle Corp.
|
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
|
1001
|
801
|
1004
|
802
|
1005
|
801
|
1006
|
803
|
1006
|
804
|
1007
|
806
|
CodLibro
|
codEditorial
|
1001
|
901
|
1004
|
902
|
1005
|
901
|
1006
|
903
|
1007
|
901
|
Y el resto de las tablas
no necesitan modificación.
CodLector
|
Paterno
|
Materno
|
Nombres
|
501
|
Pérez
|
Gómez
|
Juan
|
502
|
Ríos
|
Terán
|
Ana
|
503
|
Roca
|
|
René
|
504
|
García
|
Roque
|
Luis
|
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
|
Excelente Explicacion Gracias.
ResponderEliminarammm y el ejemplo de la 4NF?
ResponderEliminarMuy clara y precisa explicación, muchos otros se equivocan en la 1FN
ResponderEliminarEn este ejemplo debemos asumir que esa biblioteca sólo tiene una copia de cada libro y es esa la que se presta. Bastante alejado de una aplicación real así que cuidado con esos amikos.
ResponderEliminar