En este módulo, vamos a aplicar los conceptos aprendidos en los módulos anteriores a un caso de estudio práctico. Este caso de estudio se centrará en el diseño y la implementación de una base de datos relacional para una biblioteca. A través de este ejercicio, reforzaremos los principios del modelo relacional, el diseño de esquemas y la normalización.

Objetivos del Caso de Estudio

  • Diseñar un esquema relacional para una biblioteca.
  • Crear tablas y definir relaciones entre ellas.
  • Aplicar reglas de integridad referencial.
  • Realizar consultas SQL para gestionar y recuperar datos.

Descripción del Caso de Estudio

Requisitos de la Biblioteca

La biblioteca necesita una base de datos para gestionar la información sobre libros, autores, miembros y préstamos. Los requisitos específicos son los siguientes:

  1. Libros: Cada libro tiene un ISBN único, título, año de publicación y puede tener múltiples autores.
  2. Autores: Cada autor tiene un ID único, nombre y apellido.
  3. Miembros: Cada miembro tiene un ID único, nombre, apellido y fecha de membresía.
  4. Préstamos: Cada préstamo tiene un ID único, fecha de préstamo, fecha de devolución, y está asociado a un miembro y un libro.

Diseño del Esquema Relacional

Entidades y Atributos

  1. Libro

    • ISBN (Primary Key)
    • Título
    • Año de Publicación
  2. Autor

    • AutorID (Primary Key)
    • Nombre
    • Apellido
  3. Miembro

    • MiembroID (Primary Key)
    • Nombre
    • Apellido
    • Fecha de Membresía
  4. Préstamo

    • PrestamoID (Primary Key)
    • Fecha de Préstamo
    • Fecha de Devolución
    • MiembroID (Foreign Key)
    • ISBN (Foreign Key)
  5. Libro_Autor

    • ISBN (Foreign Key)
    • AutorID (Foreign Key)

Relaciones

  • Un libro puede tener múltiples autores (Relación muchos a muchos).
  • Un autor puede escribir múltiples libros (Relación muchos a muchos).
  • Un miembro puede realizar múltiples préstamos (Relación uno a muchos).
  • Un libro puede ser prestado múltiples veces (Relación uno a muchos).

Diagrama Entidad-Relación (ER)

Diagrama ER (Nota: Inserta un diagrama ER visual aquí)

Transformación del Diagrama ER a Esquema Relacional

Basado en el diagrama ER, transformamos las entidades y relaciones en tablas relacionales.

Tablas Relacionales

CREATE TABLE Libro (
    ISBN VARCHAR(13) PRIMARY KEY,
    Titulo VARCHAR(255) NOT NULL,
    Año_Publicacion INT
);

CREATE TABLE Autor (
    AutorID INT PRIMARY KEY,
    Nombre VARCHAR(255) NOT NULL,
    Apellido VARCHAR(255) NOT NULL
);

CREATE TABLE Miembro (
    MiembroID INT PRIMARY KEY,
    Nombre VARCHAR(255) NOT NULL,
    Apellido VARCHAR(255) NOT NULL,
    Fecha_Membresia DATE
);

CREATE TABLE Prestamo (
    PrestamoID INT PRIMARY KEY,
    Fecha_Prestamo DATE NOT NULL,
    Fecha_Devolucion DATE,
    MiembroID INT,
    ISBN VARCHAR(13),
    FOREIGN KEY (MiembroID) REFERENCES Miembro(MiembroID),
    FOREIGN KEY (ISBN) REFERENCES Libro(ISBN)
);

CREATE TABLE Libro_Autor (
    ISBN VARCHAR(13),
    AutorID INT,
    PRIMARY KEY (ISBN, AutorID),
    FOREIGN KEY (ISBN) REFERENCES Libro(ISBN),
    FOREIGN KEY (AutorID) REFERENCES Autor(AutorID)
);

Ejercicios Prácticos

Ejercicio 1: Insertar Datos

Inserta datos en las tablas creadas.

-- Insertar datos en la tabla Libro
INSERT INTO Libro (ISBN, Titulo, Año_Publicacion) VALUES ('978-3-16-148410-0', 'El Quijote', 1605);
INSERT INTO Libro (ISBN, Titulo, Año_Publicacion) VALUES ('978-0-14-044913-6', 'La Odisea', -800);

-- Insertar datos en la tabla Autor
INSERT INTO Autor (AutorID, Nombre, Apellido) VALUES (1, 'Miguel', 'de Cervantes');
INSERT INTO Autor (AutorID, Nombre, Apellido) VALUES (2, 'Homero', '');

-- Insertar datos en la tabla Miembro
INSERT INTO Miembro (MiembroID, Nombre, Apellido, Fecha_Membresia) VALUES (1, 'Juan', 'Pérez', '2023-01-01');
INSERT INTO Miembro (MiembroID, Nombre, Apellido, Fecha_Membresia) VALUES (2, 'Ana', 'García', '2023-02-15');

-- Insertar datos en la tabla Prestamo
INSERT INTO Prestamo (PrestamoID, Fecha_Prestamo, Fecha_Devolucion, MiembroID, ISBN) VALUES (1, '2023-03-01', NULL, 1, '978-3-16-148410-0');

-- Insertar datos en la tabla Libro_Autor
INSERT INTO Libro_Autor (ISBN, AutorID) VALUES ('978-3-16-148410-0', 1);
INSERT INTO Libro_Autor (ISBN, AutorID) VALUES ('978-0-14-044913-6', 2);

Ejercicio 2: Consultas SQL

Realiza las siguientes consultas para recuperar información de la base de datos.

  1. Listar todos los libros y sus autores.

    SELECT L.Titulo, A.Nombre, A.Apellido
    FROM Libro L
    JOIN Libro_Autor LA ON L.ISBN = LA.ISBN
    JOIN Autor A ON LA.AutorID = A.AutorID;
    
  2. Listar todos los préstamos activos (sin fecha de devolución).

    SELECT P.PrestamoID, M.Nombre, M.Apellido, L.Titulo, P.Fecha_Prestamo
    FROM Prestamo P
    JOIN Miembro M ON P.MiembroID = M.MiembroID
    JOIN Libro L ON P.ISBN = L.ISBN
    WHERE P.Fecha_Devolucion IS NULL;
    
  3. Contar el número de libros prestados por cada miembro.

    SELECT M.Nombre, M.Apellido, COUNT(P.PrestamoID) AS Numero_Prestamos
    FROM Miembro M
    JOIN Prestamo P ON M.MiembroID = P.MiembroID
    GROUP BY M.Nombre, M.Apellido;
    

Retroalimentación y Consejos

  • Errores Comunes:

    • No definir correctamente las claves primarias y foráneas puede llevar a problemas de integridad referencial.
    • Olvidar insertar datos en las tablas de relación (como Libro_Autor) puede resultar en consultas incompletas o incorrectas.
  • Consejos:

    • Siempre verifica que las relaciones entre tablas estén correctamente definidas.
    • Utiliza transacciones para asegurar que las operaciones de inserción y actualización se realicen de manera atómica.

Conclusión

En este caso de estudio, hemos diseñado y creado una base de datos relacional para una biblioteca, aplicando los principios del modelo relacional, integridad referencial y normalización. A través de ejercicios prácticos, hemos reforzado nuestra comprensión de cómo gestionar y consultar datos en una base de datos relacional. Este conocimiento es fundamental para cualquier profesional que trabaje con bases de datos en el mundo real.

© Copyright 2024. Todos los derechos reservados