Del diagrama Entidad-Relación al Modelo Físico en MySQL
⏱️ 2 horas👥 Trabajo en parejas🎯 3 entregables
📋 Caso de Estudio
Red de Bibliotecas Municipales "Lectura para Todos"
El municipio necesita digitalizar el sistema de préstamos de sus 3 bibliotecas. Los requerimientos son:
Cada biblioteca tiene un nombre, dirección, teléfono y horario de atención.
Los libros tienen ISBN único, título, año de publicación, editorial y género. Un libro puede tener varios autores y un autor puede escribir varios libros.
Los usuarios (lectores) se registran con nombre, apellido, correo, teléfono y dirección. Cada uno tiene un carné único.
Un usuario puede hacer préstamos de libros. Cada préstamo registra fecha de salida, fecha de devolución esperada y fecha real de devolución (puede estar vacía si aún no devuelve).
Un libro tiene ejemplares físicos (copias). Cada ejemplar tiene un código de barras único y un estado (disponible, prestado, en reparación, perdido).
Los empleados trabajan en una biblioteca. Tienen nombre, cargo, correo institucional y fecha de contratación. Un empleado puede ser encargado de varios préstamos.
Los usuarios pueden hacer reservas de libros que están prestados. La reserva tiene fecha de solicitud y estado (activa, cancelada, cumplida).
💡 Consejo del profesor: Empiecen identificando los sustantivos del caso de estudio. Cada sustantivo candidato (biblioteca, libro, autor, usuario, préstamo, ejemplar, empleado, reserva) es una posible entidad. Luego pregunten: "¿tiene atributos propios?" y "¿se relaciona con otros sustantivos?"
🎯 Objetivos del Taller
Cada equipo debe producir tres entregables que representan los tres niveles de abstracción del modelado de datos:
Modelo Conceptual (Entidad-Relación): Diagrama con entidades, atributos, claves primarias y cardinalidades.
Modelo Lógico (Relacional): Tablas con claves primarias, foráneas, tipos de datos y normalización hasta 3FN.
Modelo Físico (MySQL): Script SQL con CREATE TABLE, constraints, índices y datos de prueba.
🔷 Fase 1: Modelo Entidad-Relación Conceptual
40 min
📐 Instrucciones
Identifique mínimo 6 entidades del caso de estudio.
Para cada entidad, liste sus atributos. Marque la clave primaria con (PK) y atributos multivaluados con { }.
Trace las relaciones entre entidades indicando la cardinalidad (1:1, 1:N, N:M).
Si hay una relación N:M, recuerde que necesitará una entidad intermedia en el modelo lógico.
⚠️ Trampa común: No confunda "Libro" con "Ejemplar". El libro es la obra (ej: "Harry Potter y la Piedra Filosofal"). El ejemplar es la copia física que se presta (ej: "copia #3 de esa obra").
🔷 Fase 2: Modelo Relacional Lógico
40 min
📐 Instrucciones
Convierta cada entidad del modelo E-R en una tabla.
Convierta cada relación N:M en una tabla intermedia con las PK de ambas entidades como FK.
Defina claves primarias (PK) y claves foráneas (FK) para cada tabla.
Aplique normalización: verifique que esté en 3FN (ningún atributo depende de otro atributo que no sea la clave).
Agregue reglas de negocio: ¿qué campos son obligatorios? ¿Hay valores únicos? ¿Hay restricciones de dominio?
✅ Checklist de Entrega
Tabla intermedia para Autor-Libro (relación N:M)
Todas las tablas con PK definida
FK correctamente referenciadas a sus tablas padre
Atributos compuestos descompuestos en columnas individuales
Normalización verificada (1FN, 2FN, 3FN)
Restricciones de integridad definidas (NOT NULL, UNIQUE, CHECK)
📋 Ejemplo de Tabla: PRÉSTAMO
Columna
Tipo sugerido
Restricciones
id_prestamo PK
INT AUTO_INCREMENT
NOT NULL
fecha_salida
DATE
NOT NULL
fecha_devolucion_esperada
DATE
NOT NULL
fecha_devolucion_real
DATE
NULL (puede no devolver aún)
id_usuario FK
INT
NOT NULL → USUARIO
id_ejemplar FK
INT
NOT NULL → EJEMPLAR
id_empleado FK
INT
NOT NULL → EMPLEADO
🧠 Pregunta clave para normalizar: "¿Este atributo depende de toda la clave primaria, o solo de una parte?" Si depende de una parte, va en otra tabla (2FN). "¿Este atributo depende de otro atributo que no sea la PK?" Si sí, también va en otra tabla (3FN).
🔷 Fase 3: Modelo Físico MySQL
40 min
📐 Instrucciones
Escriba el script SQL para crear la base de datos y todas las tablas en MySQL.
Use tipos de datos apropiados: VARCHAR para textos, INT para enteros, DATE para fechas, ENUM para estados limitados.
Defina PRIMARY KEY, FOREIGN KEY con ON DELETE y ON UPDATE apropiados.
Agregue índices en columnas de búsqueda frecuente (correo, ISBN, carné).
Incluya al menos 5 registros de prueba por tabla (INSERT INTO).
Escriba 2 consultas SELECT de ejemplo que demuestren el uso de JOINs.
✅ Checklist de Entrega
Script SQL completo y ejecutable en MySQL
CREATE DATABASE y USE al inicio
Todas las tablas con tipos de datos correctos
PK y FK definidas con CONSTRAINT explícito
ON DELETE / ON UPDATE definidos (CASCADE, SET NULL, RESTRICT)
Índices en columnas de búsqueda frecuente
Mínimo 5 INSERT por tabla
2 consultas con JOIN funcionales
💻 Fragmento de Ejemplo en MySQL
-- 1. Crear la base de datosCREATE DATABASEBibliotecaMunicipalCHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USEBibliotecaMunicipal;
-- 2. Tabla USUARIOCREATE TABLEUsuario (
id_usuario INT AUTO_INCREMENT PRIMARY KEY,
carne VARCHAR(20) NOT NULL UNIQUE,
nombre VARCHAR(50) NOT NULL,
apellido VARCHAR(50) NOT NULL,
correo VARCHAR(100) NOT NULL UNIQUE,
telefono VARCHAR(15),
calle VARCHAR(100),
ciudad VARCHAR(50),
codigo_postal VARCHAR(10)
);
-- Índice adicional para búsquedas por nombreCREATE INDEXidx_usuario_nombreONUsuario(nombre, apellido);
-- 3. Tabla intermedia para relación N:M Autor-LibroCREATE TABLEAutor_Libro (
id_autor INT NOT NULL,
id_libro INT NOT NULL,
PRIMARY KEY (id_autor, id_libro),
FOREIGN KEY (id_autor) REFERENCESAutor(id_autor)
ON DELETE CASCADEON UPDATE CASCADE,
FOREIGN KEY (id_libro) REFERENCESLibro(id_libro)
ON DELETE CASCADEON UPDATE CASCADE
);
🔍 Consulta de ejemplo que deben lograr:
"Listar el título del libro, nombre del usuario y fecha de devolución esperada de todos los préstamos activos (donde fecha_devolucion_real IS NULL)."
📊 Rúbrica de Evaluación
Total: 100 pts
Criterio
Pts
Qué se evalúa
Modelo Conceptual (E-R)
25
Entidades completas, atributos bien definidos, cardinalidades correctas, notación estándar.
Modelo Lógico (Tablas)
25
Conversión correcta E-R → tablas, PK/FK bien definidas, tabla intermedia para N:M, normalización 3FN.
Modelo Físico (MySQL)
30
Script ejecutable, tipos de datos apropiados, constraints completos, índices, INSERTs y SELECTs con JOIN.
Documentación y presentación
10
Explican su modelo oralmente, responden preguntas del docente, trabajo limpio y organizado.
Trabajo en equipo
10
Ambos participan, se distribuyen tareas, colaboran activamente durante el taller.
Total: 100 puntos
🏆 Bonus (+5 pts): Agreguen una entidad adicional no mencionada en el caso (ej: Categoría del libro, Multas por retraso, Historial de renovaciones) y justifiquen por qué la incluyeron.
📎 Entregables Finales
Cada equipo debe entregar:
Diagrama E-R en PDF o imagen (draw.io, Lucidchart, o foto de papel cuadriculado).
Modelo Lógico en documento: lista de tablas con columnas, tipos de datos, PK, FK y restricciones.
Script SQL en archivo .sql: CREATE DATABASE, CREATE TABLE, INSERTs y 2 SELECTs con JOIN.
Presentación oral de 3 minutos explicando sus decisiones de diseño.
💾 Guarden todo en una carpeta con el nombre: Taller_Modelado_EquipoX.zip