📚 Taller: Modelado de Bases de Datos

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:

💡 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:

  1. Modelo Conceptual (Entidad-Relación): Diagrama con entidades, atributos, claves primarias y cardinalidades.
  2. Modelo Lógico (Relacional): Tablas con claves primarias, foráneas, tipos de datos y normalización hasta 3FN.
  3. 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

✅ Checklist de Entrega

🗺️ Guía de Entidades Esperadas

BIBLIOTECA
id_biblioteca (PK)
nombre
dirección
teléfono
horario
LIBRO
id_libro (PK)
ISBN
título
año_publicación
editorial
género
AUTOR
id_autor (PK)
nombre
apellido
nacionalidad
USUARIO
id_usuario (PK)
carné (único)
nombre
apellido
correo
teléfono
dirección
EJEMPLAR
id_ejemplar (PK)
código_barras
estado
id_libro (FK)
id_biblioteca (FK)
PRÉSTAMO
id_prestamo (PK)
fecha_salida
fecha_dev_esperada
fecha_dev_real
id_usuario (FK)
id_ejemplar (FK)
id_empleado (FK)
EMPLEADO
id_empleado (PK)
nombre
cargo
correo_institucional
fecha_contratación
id_biblioteca (FK)
RESERVA
id_reserva (PK)
fecha_solicitud
estado
id_usuario (FK)
id_libro (FK)
⚠️ 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

✅ Checklist de Entrega

📋 Ejemplo de Tabla: PRÉSTAMO

ColumnaTipo sugeridoRestricciones
id_prestamo PKINT AUTO_INCREMENTNOT NULL
fecha_salidaDATENOT NULL
fecha_devolucion_esperadaDATENOT NULL
fecha_devolucion_realDATENULL (puede no devolver aún)
id_usuario FKINTNOT NULL → USUARIO
id_ejemplar FKINTNOT NULL → EJEMPLAR
id_empleado FKINTNOT 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

✅ Checklist de Entrega

💻 Fragmento de Ejemplo en MySQL

-- 1. Crear la base de datos
CREATE DATABASE BibliotecaMunicipal
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

USE BibliotecaMunicipal;

-- 2. Tabla USUARIO
CREATE TABLE Usuario (
    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 nombre
CREATE INDEX idx_usuario_nombre ON Usuario(nombre, apellido);

-- 3. Tabla intermedia para relación N:M Autor-Libro
CREATE TABLE Autor_Libro (
    id_autor    INT NOT NULL,
    id_libro    INT NOT NULL,
    PRIMARY KEY (id_autor, id_libro),
    FOREIGN KEY (id_autor) REFERENCES Autor(id_autor)
        ON DELETE CASCADE
        ON UPDATE CASCADE,
    FOREIGN KEY (id_libro) REFERENCES Libro(id_libro)
        ON DELETE CASCADE
        ON 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:

  1. Diagrama E-R en PDF o imagen (draw.io, Lucidchart, o foto de papel cuadriculado).
  2. Modelo Lógico en documento: lista de tablas con columnas, tipos de datos, PK, FK y restricciones.
  3. Script SQL en archivo .sql: CREATE DATABASE, CREATE TABLE, INSERTs y 2 SELECTs con JOIN.
  4. Presentación oral de 3 minutos explicando sus decisiones de diseño.
💾 Guarden todo en una carpeta con el nombre: Taller_Modelado_EquipoX.zip