Ejemplo y ejercicio 2: 2FN
Dado el ejercicio anterior normalizado en 1FN, vamos a continuar con la normalización hasta la 2FN.
1. Tabla normalizada en 1FN del ejercicio anterior: #
Resultado de la normalización en 1FN:
| ID_Compra | Cliente | Teléfono | Producto | Precio | Cantidad | Fecha_Compra |
|---|---|---|---|---|---|---|
| 1 | Ana Pérez | 777-777-777 | Manzanas | 1.5 | 2 | 2024-11-20 |
| 1 | Ana Pérez | 777-777-777 | Naranjas | 2.0 | 3 | 2024-11-20 |
| 2 | Pedro López | 888-888-888 | Plátanos | 1.0 | 4 | 2024-11-21 |
| 2 | Pedro López | 888-888-888 | Peras | 1.2 | 2 | 2024-11-21 |
| 2 | Pedro López | 888-888-888 | Melón | 3.5 | 1 | 2024-11-21 |
| 3 | Marta Sánchez | 999-999-999 | Uvas | 2.5 | 1 | 2024-11-22 |
2. Paso 1: Identificar dependencias funcionales #
-
Claves candidatas:
(ID_Compra, Producto)identifica unívocamente cada fila.
-
Dependencias funcionales:
(ID_Compra, Producto)→Cantidad.ID_Compra→Cliente,Teléfono,Fecha_Compra.Producto→Precio.
3. Paso 2: Detectar problemas de la 2FN #
Para cumplir la 2FN, eliminamos dependencias parciales, es decir, cuando un atributo no clave depende solo de parte de una clave compuesta.
Problemas: #
Cliente,TelefonoyFecha_Compradependen solo deID_Compra, no de(ID_Compra, Producto).Preciodepende solo deProducto, no de(ID_Compra, Producto).
4. Paso 3: Dividir en tablas para cumplir la 2FN #
-
Separar datos de compras generales:
- Crear una tabla independiente para las compras con los datos que dependen únicamente de
ID_Compra.
- Crear una tabla independiente para las compras con los datos que dependen únicamente de
-
Separar datos de productos:
- Crear una tabla para los productos con los datos que dependen únicamente de
Producto.
- Crear una tabla para los productos con los datos que dependen únicamente de
-
Mantener la relación entre compras y productos:
- Crear una tabla intermedia que relacione compras y productos con sus cantidades.
5. Tablas resultantes (Cumplen 2FN): #
Tabla Compras
| ID_Compra | Cliente | Teléfono | Fecha_Compra |
|---|---|---|---|
| 1 | Ana Pérez | 777-777-777 | 2024-11-20 |
| 2 | Pedro López | 888-888-888 | 2024-11-21 |
| 3 | Marta Sánchez | 999-999-999 | 2024-11-22 |
Tabla Productos
| Producto | Precio |
|---|---|
| Manzanas | 1.5 |
| Naranjas | 2.0 |
| Plátanos | 1.0 |
| Peras | 1.2 |
| Melón | 3.5 |
| Uvas | 2.5 |
Tabla Detalle_Compra
| ID_Compra | Producto | Cantidad |
|---|---|---|
| 1 | Manzanas | 2 |
| 1 | Naranjas | 3 |
| 2 | Plátanos | 4 |
| 2 | Peras | 2 |
| 2 | Melón | 1 |
| 3 | Uvas | 1 |
6. Explicación: #
-
Tabla Compras:
- Contiene datos relacionados exclusivamente con la compra (
ClienteyFecha_Compra) que dependen solo deID_Compra.
- Contiene datos relacionados exclusivamente con la compra (
-
Tabla Productos:
- Contiene datos relacionados exclusivamente con los productos (
Precio) que dependen solo deProducto.
- Contiene datos relacionados exclusivamente con los productos (
-
Tabla Detalle_Compra:
- Relaciona las compras con los productos y sus cantidades.
7. Paso 4: Esquema relacional final #
-
Relaciones:
Tabla Detalle_Compra.ID_Compra→ FK deTabla Compras.ID_Compra.Tabla Detalle_Compra.Producto→ FK deTabla Productos.Producto.
-
Claves primarias:
Tabla Compras:ID_Compra.Tabla Productos:Producto.Tabla Detalle_Compra:(ID_Compra, Producto).
8. Ventajas de la 2FN: #
-
Reducción de redundancia:
Preciono se repite en cada compra, solo se almacena una vez en la tabla Productos.- Datos del cliente y fecha no se repiten por cada producto comprado.
-
Facilidad de actualización:
- Cambiar el precio de un producto o la fecha de una compra requiere actualizar solo una tabla.
-
Consistencia:
- La relación entre compras y productos es clara y libre de inconsistencias.