Modelado logico relacional de bases de datos
Dado el ejercicio anterior normalizado en 2FN, vamos a continuar con la normalización hasta la 3FN.
Resolución del Ejercicio: Normalización hasta la 3FN
Resultado de la normalización en 2FN:
Tablas normalizadas en 2FN:
- Tabla Compras:
| ID_Compra | Cliente | Fecha_Compra | Telefono |
|---|---|---|---|
| 1 | Ana Pérez | 2024-11-20 | 777-777-777 |
| 2 | Pedro López | 2024-11-21 | 888-888-888 |
| 3 | Marta Sánchez | 2024-11-22 | 999-999-999 |
- 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 |
Paso 1: Identificar dependencias transitivas
Para cumplir la 3FN, eliminamos dependencias transitivas, es decir, cuando un atributo no clave depende de otro atributo no clave.
Dependencias transitivas detectadas:
- En la Tabla Compras, el atributo
Clientetiene una dependencia transitiva:
ID_Compra→Cliente→Información del Cliente(como nombre, teléfono, dirección, etc.).
Esto implica que los datos del cliente están redundantes si se repiten en varias compras.
Paso 2: Crear una tabla separada para los clientes
Solución: Extraer los datos del cliente a una tabla independiente y referenciarla desde la tabla de compras usando una clave foránea.
Tablas normalizadas en 3FN
- Tabla Clientes:
| ID_Cliente | Nombre | Teléfono |
|---|---|---|
| 101 | Ana Pérez | 777-777-777 |
| 102 | Pedro López | 888-888-888 |
| 103 | Marta Sánchez | 999-999-999 |
- Tabla Compras:
| ID_Compra | ID_Cliente | Fecha_Compra |
|---|---|---|
| 1 | 101 | 2024-11-20 |
| 2 | 102 | 2024-11-21 |
| 3 | 103 | 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 |
Paso 3: Esquema relacional final
-
Relaciones:
Tabla Compras.ID_Cliente→ FK deTabla Clientes.ID_Cliente.Tabla Detalle_Compra.ID_Compra→ FK deTabla Compras.ID_Compra.Tabla Detalle_Compra.Producto→ FK deTabla Productos.Producto.
-
Claves primarias:
Tabla Clientes:ID_Cliente.Tabla Compras:ID_Compra.Tabla Productos:Producto.Tabla Detalle_Compra:(ID_Compra, Producto).
Explicación de los cambios
-
Eliminación de redundancia en clientes:
- Los datos del cliente (como el teléfono) ahora están centralizados en la tabla
Clientes. Esto evita que el nombre del cliente se repita en cada compra.
- Los datos del cliente (como el teléfono) ahora están centralizados en la tabla
-
Separación de responsabilidades:
- Cada tabla ahora almacena información específica:
Clientescontiene información de los clientes.Comprascontiene información general de cada compra.Productoscontiene datos de los productos.Detalle_Comprarelaciona compras y productos.
- Cada tabla ahora almacena información específica:
-
Cumplimiento de la 3FN:
- Todas las dependencias funcionales están directas, sin transitivas.
Ventajas del modelo en 3FN
-
Reducción máxima de redundancia:
- Los datos del cliente y productos no se repiten innecesariamente.
-
Facilidad de actualización:
- Cambiar la información de un cliente o el precio de un producto afecta solo una tabla.
-
Consistencia:
- La base de datos es menos propensa a inconsistencias.
Planteamiento del problema
Tienes la siguiente tabla que ya cumple con la 2FN pero no cumple con la 3FN debido a dependencias transitivas:
Factura_ID Cliente_ID Nombre_Cliente Fecha Total Ciudad_Cliente Codigo_Postal 1 1001 Juan Pérez 2024-11-20 250.00 Madrid 28001 2 1002 María Gómez 2024-11-21 150.00 Barcelona 08001 3 1001 Juan Pérez 2024-11-21 300.00 Madrid 28001 Loading...
Problemas en el diseño
Nombre_Cliente,Ciudad_ClienteyCódigo_Postaldependen deCliente_ID, no directamente deFactura_ID.- Existe una dependencia transitiva:
Cliente_ID → (Nombre_Cliente, Ciudad_Cliente, Código_Postal)- Pero
Factura_IDno debería determinar esos valores.
Esto viola la 3FN, ya que los atributos no clave no dependen únicamente de la clave primaria directa (
Factura_ID).
Instrucciones
- Identifica las dependencias transitivas en la tabla original.
- Descompón la tabla para eliminar estas dependencias y cumplir con la 3FN.
- Usa claves primarias y foráneas para vincular las tablas.
- Representa las tablas resultantes con un diagrama relacional.
Loading...