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:
- Libros: Cada libro tiene un ISBN único, título, año de publicación y puede tener múltiples autores.
- Autores: Cada autor tiene un ID único, nombre y apellido.
- Miembros: Cada miembro tiene un ID único, nombre, apellido y fecha de membresía.
- 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
-
Libro
- ISBN (Primary Key)
- Título
- Año de Publicación
-
Autor
- AutorID (Primary Key)
- Nombre
- Apellido
-
Miembro
- MiembroID (Primary Key)
- Nombre
- Apellido
- Fecha de Membresía
-
Préstamo
- PrestamoID (Primary Key)
- Fecha de Préstamo
- Fecha de Devolución
- MiembroID (Foreign Key)
- ISBN (Foreign Key)
-
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)
(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.
-
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;
-
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;
-
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.
Fundamentos de Bases de Datos
Módulo 1: Introducción a las Bases de Datos
- Conceptos Básicos de Bases de Datos
- Tipos de Bases de Datos
- Historia y Evolución de las Bases de Datos
Módulo 2: Bases de Datos Relacionales
Módulo 3: Bases de Datos No Relacionales
- Introducción a NoSQL
- Tipos de Bases de Datos NoSQL
- Comparación entre Bases de Datos Relacionales y No Relacionales
Módulo 4: Diseño de Esquemas
- Principios de Diseño de Esquemas
- Diagramas Entidad-Relación (ER)
- Transformación de Diagramas ER a Esquemas Relacionales