El documento explica los conceptos de normalización de bases de datos relacionales. Menciona que la normalización sirve para evitar redundancia de datos, problemas de actualización y proteger la integridad de los datos. Explica las primeras, segunda y tercer formas normales, describiendo los pasos para aplicar cada una y los problemas que pueden surgir si no se aplican. También menciona otros temas como desnormalización y algunos ejemplos.
2. Las bases de datos relacionales se normalizan para:
• Evitar la redundancia de los datos.
• Evitar problemas de actualización de los datos en las tablas.
• Proteger la integridad de los datos.
Una tabla puede encontrarse en primera forma normal y no
en segunda forma normal, pero no al contrario.
• Lo mismo aplica para las siguientes formas normales.
3. 1FN:
• Eliminar “grupos de repetición”. Para poderlos eliminar se crea
una nueva tabla con una llave primaria compuesta.
• Impedir que un atributo pueda tomar más de un valor.
2FN:
• Eliminar dependencias parciales y separar dentro de sus propias
tablas.
3FN:
• Eliminar dependencias transitivas (aquellas en la cual existen
columnas que dependen de otras columnas que no son llave).
4. 1FN
Los dominios de los atributos deben incluir solo valores
atómicos.
• Los atributos no pueden ser multi-valorados ni compuestos.
Si no se aplica: se presenta repetición de datos.
10. Forma normal de Boyce-Codd
(FNBC o BCFN)
Dentro de la dependencia funcional de la tabla, todo
determinante es una clave candidata.
(DNI, Asignatura) →Tutor y Tutor→Asignatura.
11.
12. Tutoria (DNI, asignatura, tutor)
F = { DNI, asignatura tutor, tutor asignatura }
Descomposiciones posibles:
• {DNI, tutor} y {DNI, asignatura}
• {asignatura, tutor} y {asignatura, DNI}
• {tutor, asignatura} y {tutor, DNI}
13. Ejercicio 4FN
Eliminar dependencias multi-valoradas.
• Un atributo multi-valorado es un atributo que ayuda a describir una
entidad; en la extensión de una tabla, el valor del atributo se
repetiría varias veces.
• Sucede en tablas de «producto cruzado».
Si no se hace con cuidado:
• Se puede perder información.
• Presenta repetición.
Si XY|Z, entonces X,Y y X,Z.
14. Para la 4FN, se separa en dos tablas:
Reduce la necesidad de inserciones, actualizaciones y borrados.
Beneficio: En algunos casos, ocupará menos espacio.
Costo: Afecta el desempeño de las consultas, ya que implicaría más
uniones entre tablas.
15.
16.
17. Ejercicio 5FN
Divide una tabla en tres o más.
Se puede encontrar en una relación muchos a muchos a
muchos.
FN polémica (depende de la situación).
Una tabla no está en 5FN si hay una descomposición de
esa tabla que muestre la misma información que la
original.
20. Ejemplo: Un servicio de biblioteca quiere llevar el control
del préstamo que incluya los siguientes datos:
• Información sobre el usuario del servicio, datos del libro y la
información sobre el préstamos que se realiza.
usuario libro
• Usuario(id_usuario, nombre, id_libro, fecha_prestamo,
fecha_entrega)
• Libro(id_libro, título, editorial, país, año)
21. • Usuario(id_usuario, nombre, id_libro, fecha_prestamo,
fecha_entrega)
• Libro(id_libro, título, editorial, país, año)
En Usuario, cada vez que un usuario pida un libro hay que
escribir su número de usuario (id_usuario) y su nombre
(nombre).
¿Qué problemas puede traer esto?
• Hacer una tabla con datos y ver que pasa.
22. ¿Qué problemas puede traer esto?
id_usuario nombre id_libro fecha_prestamo fecha_entrega
3435 J. Perez Qa76.9 25/4/07 13/5/07
3435 J. Perez Qa76.9 5/10/07 13/10/07
3435 J. Perez Qa76.893 3/4/07 13/3/07
5678 A. Ramírez Qa76.9 2/4/07 3/5/07
23. 1FN
Usuario(id_usuario, nombre, id_libro, fecha_prestamo,
fecha_entrega)
1. Identificar “grupos de repetición”.
• “grupo de repetición”: id_usuario, nombre, id_libro,
fecha_prestamo, fecha_entrega.
2. Eliminar “grupos de repetición”.
• Se crea una nueva tabla con una llave primaria compuesta.
Prestamo(id_usuario, id_libro, fecha_prestamo, fecha_entrega).
24. 2FN
Todas las dependencias parciales se deben eliminar y
separar dentro de sus propias tablas.
• Una dependencia parcial es un atributo que no depende
completamente de la llave primaria (dependencia funcional).
• Normalmente se presenta cuando la llave primaria es compuesta.
Prestamo(id_usuario, id_libro, fecha_prestamo, fecha_entrega)
25. Pasos 2FN:
• Determinar cuáles atributos no dependen de la llave primaria
compuesta de la tabla.
• Eliminar esas columnas de la tabla base.
• Crear una segunda tabla con esos atributos cuya llave primaria será
el atributo del cual dependen.
26. 3FN
En ésta no hay dependencias transitivas.
• Una dependencia transitiva es aquella en la cual existen atributos
que dependen de otros atributos que tampoco son llave.
Usuario(id_usuario, nombre)
Prestamo(id_usuario, id_libro, fecha_prestamo, fecha_entrega)
27. Pasos 3FN:
• Determinar que columnas son dependientes de otra columna no
llave.
• Eliminar esas columnas de la tabla base
• Crear otra tabla con esas columnas y con la columna no llave de la
cual son dependientes, crear una llave primaria para esta tabla.
28. Considerando la entidad usuario, sus atributos son:
Usuario(id_usuario, nombre)
Libro(id_libro, título, editorial, país, año)
Prestamo(id_usuario, id_libro, fecha_prestamo, fecha_entrega)
usuario prestamo libro
31. 2FN
Venta(Num_Orden, Fecha, Num_Cliente, Nombre_Cliente,
Direccion_Cliente, Num_Vendedor, Nombre_Vendedor)
DetalleVenta(Num_Orden, Clave_Prod, Descripcion, Cantidad,
PrecioUnidad)
Producto(Clave_Prod, Descripcion)
DetalleVenta(Num_Orden, Clave_Prod, Cantidad, PrecioUnidad)
//caso donde el precio puede variar, por promociones, descuento a
clientes, etc.
Venta(Num_Orden, Fecha, Num_Cliente, Nombre_Cliente,
Direccion_Cliente, Num_Vendedor, Nombre_Vendedor)
32. 2FN
Si no se aplica:
• Repetición de datos. La “descripción” aparecería cada que se
tiene una venta sobre un producto.
• Al borrar: Al borrar información de los productos en
DetalleVenta, se borra el producto.
• Al insertar: Para insertar un producto, se debería insertar una
órden de venta.
• Al actualizar: Para cambiar una descripción, se debe cambiar en
cada DetalleVenta.
34. Si no se aplica 3FN:
• Repetición de datos: El nombre del cliente y del vendedor
aparecería en cada Venta.
• Al borrar: Al borrar una Venta, se borra el cliente y el vendedor.
• Al insertar: Al insertar un vendedor o cliente, se tendría que
agregar una venta.
• Al actualizar: Para cambiar un nombre o dirección, se debe
cambiar en cada Venta.
35. Ejemplo
Se requiere tener la información sobre los alumnos de los
distintos programas de posgrado:
• datos generales,
• que grado cursan (especialidad, maestría o doctorado),
• el nombre del programa,
• que materias han cursado,
• que calificación llevan en cada una de ellas,
• en que período la cursaron y con que profesor,
• de cada materia se necesita saber su clave, su área y el número de
créditos.
36. alumno(matricula, nombre, grado, programa, clave_mat,
materia, profesor, periodo_cursado, calificacion, creditos,
área)
1FN: Identificar “grupos de repetición” y sacarlos a otra
tabla.
38. 2FN: Identificar atributos que no dependen completamente
de la llave primaria compuesta y mandarlos a otra tabla.
alumno-materia(matricula, clave_mat, materia, profesor,
periodo_cursado, calificacion, creditos, area))
40. 3FN: Identificar atributos no llave que dependan de otro
atributo no llave.
nombre
alumno matricula grado
programa
alumno-materia profesor
matricula, clave_mat, periodo_cursada
calificacion
materia
materia clave_mat creditos
area
57. Desnormalización
Puede ser conveniente desnormalizar según aspectos de
desempeño y manejabilidad (propósito de la base de
datos).
Diferenciar el punto de vista académico y teórico del
práctico.
Si las tablas están en 3FN, las inserciones no serían un
problema, pero las actualizaciones y los borrados
constantes sí lo podrían ser.
58. Desde la perspectiva de un desarrollador, podría no ser
práctico llegar a la 5FN.
• Repetir atributos que se usen para un cálculo, sin necesidad de
tener que unir con otras tablas.
• Cuando existen grupos de filas, que deben ser procesadas como
grupo, más que como fila.
• Cuando ciertos atributos en una tabla son constantemente
consultados.