Guía de Estudio: Normalización y Diseño de Bases de Datos Relacionales
Esta guía de estudio presenta un caso práctico de diseño de bases de datos basado en los principios de integridad y estructuras relacionales. A través de un ejemplo de una biblioteca, se ilustra el proceso de normalización para asegurar la consistencia de los datos y eliminar redundancias innecesarias, utilizando como referencia los modelos de datos de estudiantes, cursos y departamentos.
1. Caso de Estudio Práctico: El Sistema de la Biblioteca
En un entorno de biblioteca, se desea registrar la información de los usuarios, los libros que retiran y los departamentos a los que pertenecen. Inicialmente, el sistema utiliza una tabla plana (sin normalizar) que combina toda la información en una sola estructura, similar a lo que resultaría de una operación de natural join entre múltiples relaciones.
Tabla Plana: Registro_Biblioteca (Sin Normalizar)
Esta tabla presenta redundancias significativas. Por ejemplo, los datos del usuario y del departamento se repiten cada vez que se retira un libro diferente.
Tabla de préstamos de libros de la biblioteca
| ID_Usuario | Nombre_Usuario | Nombre_Depto | Edificio_Depto | ID_Libro | Título_Libro | Fecha_Retiro |
|---|---|---|---|---|---|---|
| 00128 | Zhang | Comp. Sci. | Taylor | CS-101 | Intro. a SQL | 2017-10-01 |
| 00128 | Zhang | Comp. Sci. | Taylor | CS-347 | Bases de Datos | 2017-10-15 |
| 12345 | Shankar | Comp. Sci. | Taylor | CS-101 | Intro. a SQL | 2017-09-20 |
| 19991 | Brandt | History | Painter | HIS-351 | Historia Mundial | 2018-02-10 |
2. Proceso de Normalización Paso a Paso
El objetivo de la normalización es utilizar restricciones de integridad (como claves primarias y foráneas) para evitar la pérdida de consistencia y proteger contra daños accidentales en la base de datos.
Paso 1: Primera Forma Normal (1FN)
Requisito: Todos los atributos deben ser atómicos (valores indivisibles) y no deben existir grupos repetidos.
En nuestra tabla original, los valores ya son atómicos. Sin embargo, para cumplir con la 1FN, debemos definir una clave primaria (primary key) que identifique de forma única cada fila. En este caso, la combinación de ID_Usuario, ID_Libro y Fecha_Retiro actúa como superclave.
- Dependencia eliminada: Atributos no atómicos o multivaluados.
Paso 2: Segunda Forma Normal (2FN)
Requisito: Estar en 1FN y que todos los atributos que no forman parte de la clave primaria dependan de toda la clave, no solo de una parte de ella.
Análisis de Dependencias Parciales:
Nombre_UsuarioyNombre_Deptodependen solo deID_Usuario.Título_Librodepende solo deID_Libro.
Transformación: Separamos los datos del usuario y los datos del libro en tablas independientes para eliminar estas dependencias parciales.
- Tabla Usuario: (
ID_Usuario, Nombre_Usuario, Nombre_Depto, Edificio_Depto) - Tabla Libro: (
ID_Libro, Título_Libro) - Tabla Retiro: (
ID_Usuario,ID_Libro, Fecha_Retiro) — Aquí ID_Usuario e ID_Libro actúan como claves foráneas (foreign keys).
Paso 3: Tercera Forma Normal (3FN)
Requisito: Estar en 2FN y que no existan dependencias transitivas (un atributo no clave no puede depender de otro atributo no clave).
Análisis de Dependencia Transitiva en la Tabla Usuario:
ID_Usuariodetermina elNombre_Depto.Nombre_Deptodetermina elEdificio_Depto.- Por lo tanto,
Edificio_Deptodepende deID_Usuariode forma transitiva a través deNombre_Depto.
Transformación: Creamos una relación separada para los departamentos, asegurando que cada hecho se registre solo una vez.
- Tabla Usuario: (
ID_Usuario, Nombre_Usuario, Nombre_Depto) - Tabla Departamento: (
Nombre_Depto, Edificio_Depto) - Tabla Libro: (
ID_Libro, Título_Libro) - Tabla Retiro: (
ID_Usuario,ID_Libro, Fecha_Retiro)
Paso 4: Forma Normal de Boyce-Codd (FNBC)
Requisito: Para cada dependencia funcional A \rightarrow B, A debe ser una superclave.
En el diseño de la biblioteca, supongamos que cada departamento tiene múltiples edificios pero cada edificio pertenece a un solo departamento. Si tuviéramos una relación donde el edificio determina el departamento, y el edificio no fuera clave primaria, estaríamos violando la FNBC. Al separar Departamento y Usuario, y asegurar que Nombre_Depto es la clave en su propia tabla, eliminamos anomalías donde la información del edificio se perdería si se eliminara al último usuario de ese departamento.
3. Cuestionario de Evaluación (Quiz)
Pregunta 1: En una base de datos relacional, ¿qué tipo de restricción asegura que un valor que aparece en una relación para un conjunto de atributos también deba aparecer en otra relación?
- A) Restricción de Dominio.
- B) Restricción de Integridad Referencial (Clave Foránea).
- C) Restricción Check.
Pregunta 2: Si realizamos un natural join entre las tablas Usuario y Retiro, y un usuario no ha realizado ningún retiro, ¿qué sucede con sus datos en el resultado?
- A) Aparecen con valores nulos en los campos del libro.
- B) Los datos del usuario se pierden en el resultado.
- C) El sistema genera un error de ejecución.
Pregunta 3: ¿Cuál es la función del comando rollback work en una transacción?
- A) Hacer permanentes todos los cambios en la base de datos.
- B) Deshacer todas las actualizaciones realizadas por la transacción actual, restaurando el estado anterior.
- C) Eliminar una tabla de la base de datos.
Pregunta 4: ¿Para qué se utiliza la cláusula on delete cascade en una declaración de clave foránea?
- A) Para impedir que se elimine cualquier registro que sea referenciado por otra tabla.
- B) Para eliminar automáticamente los registros dependientes en la tabla que hace la referencia cuando se elimina el registro original.
- C) Para convertir todos los valores referenciados en nulos.
Pregunta 5: Un índice en un atributo de una relación es una estructura de datos que permite:
- A) Modificar el esquema lógico de la base de datos.
- B) Encontrar de manera eficiente las tuplas que tienen un valor específico para ese atributo sin escanear toda la relación.
- C) Crear copias de seguridad automáticas.
4. Clave de Respuestas
- B. La integridad referencial asegura que las referencias entre tablas sean consistentes (ej. que el
ID_Usuarioen la tablaRetiroexista en la tablaUsuario). - B. En un natural join (o inner join), solo se preservan las tuplas que coinciden en ambas relaciones. Para mantener al usuario sin retiros, se requeriría un left outer join.
- B. El comando rollback garantiza la atomicidad, asegurando que si ocurre un error, la base de datos no quede en un estado parcialmente actualizado.
- B. La opción cascade permite que las eliminaciones se propaguen a través de la cadena de dependencias de claves foráneas.
- B. Los índices forman parte del esquema físico y mejoran el rendimiento de las consultas de selección.
5. Glosario de Términos Clave
- Clave Primaria (Primary Key): Conjunto de atributos que identifica de forma única cada tupla en una relación. No permite valores nulos.
- Integridad Referencial: Regla que garantiza que si una tabla A referencia a una tabla B, el registro referenciado en B debe existir.
- Join (Combinación): Operación que permite combinar información de múltiples relaciones. El natural join lo hace basándose en atributos con nombres iguales.
- Outer Join (Combinación Externa): Operación de combinación que preserva las tuplas que no tienen coincidencia en la otra relación, rellenando los atributos faltantes con valores null.
- Transacción: Secuencia de operaciones de consulta y actualización que se ejecutan como una unidad atómica (todo o nada).
- Vista (View): Una “relación virtual” definida por una consulta SQL. No se almacena físicamente (a menos que sea una materialized view), sino que se computa bajo demanda.
- Índice: Estructura de datos redundante que acelera la recuperación de registros específicos, similar al índice de un libro en una biblioteca.
- Restricción Check: Predicado que debe ser satisfecho por cada tupla en una relación (ej.
check (presupuesto > 0)).