Autor: Guía Académica de Diseño de Bases de Datos
Nivel: Universitario – Intermedio
Objetivo: Aprender a aplicar las Formas Normales (1FN, 2FN, 3FN, FNBC) mediante ejemplos prácticos con soluciones paso a paso.
Supongamos que tenemos una base de datos de ventas con la siguiente estructura:
| ID_Venta | Fecha_Venta | ID_Cliente | Nombre_Cliente | ID_Producto | Nombre_Producto | Cantidad | Precio_Unitario | | --- | --- | --- | --- | --- | --- | --- | --- | | 1 | 2022-01-01 | 1 | Juan Pérez | 1 | Producto A | 2 | 10.00 | | 1 | 2022-01-01 | 1 | Juan Pérez | 2 | Producto B | 3 | 20.00 | | 2 | 2022-01-15 | 2 | María Gómez | 1 | Producto A | 1 | 10.00 |
Solución:
Primera forma normal (1FN):
Segunda forma normal (2FN):
Tercera forma normal (3FN):
La solución es:
Tabla Ventas
| ID_Venta | Fecha_Venta | ID_Cliente | | --- | --- | --- | | 1 | 2022-01-01 | 1 | | 2 | 2022-01-15 | 2 |
Tabla Detalle_Ventas
| ID_Venta | ID_Producto | Cantidad | Precio_Unitario | | --- | --- | --- | --- | | 1 | 1 | 2 | 10.00 | | 1 | 2 | 3 | 20.00 | | 2 | 1 | 1 | 10.00 |
Tabla Clientes
| ID_Cliente | Nombre_Cliente | | --- | --- | | 1 | Juan Pérez | | 2 | María Gómez |
Tabla Productos
| ID_Producto | Nombre_Producto | | --- | --- | | 1 | Producto A | | 2 | Producto B |
Contexto: En muchos programas de ingeniería, el curso “Base de Datos 211” o el ejercicio 2.11 de un libro conocido propone un esquema problemático con dependencias funcionales complejas. Aquí presentamos una versión estándar de ese ejercicio.
Table A: Students (Key: Student_ID) | Student_ID | Student_Name | | :--- | :--- | | 1001 | Ana Torres | | 1002 | Luis Rojas | | 1003 | Sofía Vargas |
Table B: Courses (Key: Course_Code) | Course_Code | Course_Name | Professor | Professor_Office | | :--- | :--- | :--- | :--- | | M101 | Math I | Dr. Gomez | Bldg A | | H205 | History | Dr. Perez | Bldg B | | Q110 | Chem | Dr. Liu | Bldg C |
Table C: Enrollments (Key: Student_ID + Course_Code) | Student_ID | Course_Code | Grade | | :--- | :--- | :--- | | 1001 | M101 | 85 | | 1001 | H205 | 90 | | 1002 | M101 | 78 | | 1003 | H205 | 92 | | 1003 | Q110 | 88 |
Analysis: We are doing much better! But look at Table B (Courses). We still have a hidden issue.
Regla: Eliminar dependencias transitivas.
Análisis: En la tabla Pedidos, tenemos Nombre_Cliente y Ciudad_Cliente. Estos atributos dependen de ID_Cliente, no de Num_Pedido.
Num_Pedido -> ID_Cliente -> Nombre_Cliente. Esto es una dependencia transitiva. Autor: Guía Académica de Diseño de Bases de
Acción: Separamos la información de los clientes.
Tabla Final: Clientes | ID_Cliente (PK) | Nombre_Cliente | Ciudad_Cliente | | :--- | :--- | :--- | | C01 | Ana Torres | Madrid | | C02 | Luis Gómez | Barcelona |
Tabla Final: Pedidos | Num_Pedido (PK) | Fecha | ID_Cliente (FK) |
Tabla Final: Productos (Sin cambios desde el paso 2FN)
Tabla Final: Detalle_Pedido (Sin cambios desde el paso 2FN)
La normalización es el proceso de organizar los datos en una base de datos para reducir la redundancia y mejorar la integridad de los datos. El objetivo es dividir tablas grandes en tablas más pequeñas y relacionarlas mediante relaciones (claves foráneas).
A continuación tienes un conjunto de ejercicios resueltos y explicados sobre normalización de bases de datos (hasta 3ª forma normal), listos para convertir a PDF. Cada ejercicio incluye: enunciado, análisis de dependencias funcionales, determinación de claves, cálculo de cierres, identificación de anomalías, descomposición y comprobación de pérdidas y dependencias preservadas. Supongamos que tenemos una base de datos de
| Forma Normal | Condición Principal | |--------------|----------------------| | 1FN | Valor atómico por atributo (sin grupos repetitivos). | | 2FN | Estar en 1FN + dependencia funcional total de atributos no principales respecto a la clave primaria (sin dependencias parciales). | | 3FN | Estar en 2FN + sin dependencias transitivas (un atributo no clave no debe depender de otro no clave). | | FNBC | Para toda dependencia no trivial X → Y, X debe ser superclave. |