Este proyecto de base de datos para un videoclub está diseñado para gestionar eficientemente los datos relacionados con socios, películas, préstamos y direcciones. Utilizando un enfoque relacional, el esquema de base de datos permite una gestión detallada de los recursos del videoclub, asegurando la integridad y accesibilidad de los datos.
El diagrama ER está organizado para representar las entidades principales del sistema del videoclub y sus interrelaciones:
-
Socio: Representa a los miembros del videoclub. Cada socio está identificado de manera única por un
id_socioy tiene atributos personales comonombre,apellido1,apellido2,email,telefono,fecha_nacimiento, ydni. -
Direccion: Almacena las direcciones de los socios. Está relacionada directamente con la tabla
socioa través deid_socio, permitiendo que cada socio tenga una única dirección asociada. No es un dato obligatorio. -
Pelicula: Contiene información sobre las películas disponibles en el videoclub, incluyendo un
id_pelicula,titulo,id_genero,id_director, ysinopsis. -
Genero y Director: Estas tablas almacenan información sobre los géneros de películas y los directores, respectivamente, y se relacionan con la tabla
peliculapara proporcionar una estructura normalizada. -
Copia: Mantiene registros de las copias físicas individuales de las películas. Cada copia está vinculada a una película específica por
id_peliculay tiene unidúnico y unid_copiapara identificar la copia específica dentro de las copias de esa película. -
Prestamo: Registra los préstamos de copias a los socios, incluyendo información sobre el socio, la copia prestada, y las fechas de préstamo y devolución. En el caso que no haya fecha de devolución se considera no disponible.
El diagrama entidad / relación es el archivo diagrama-entidad-relacion.drawio
-
Tablas de Socios y Direcciones: La separación de las tablas
socioydireccionfacilita la gestión de información personal y de contacto, permitiendo cambios en las direcciones sin afectar la información principal del socio. Cada socio puede tener a lo máximo una dirección, lo que se asegura mediante la relación uno a uno entre estas tablas. -
Tabla de Copias y su Relación con Películas: La distinción entre
idyid_copiaen la tablacopiapermite gestionar múltiples instancias físicas de una película. Elides un identificador único para cada fila (copia) en la tabla, mientras queid_copiase utiliza para numerar las copias de una misma película, permitiendo un seguimiento detallado del inventario de películas. -
Relaciones y Claves Foráneas: Las relaciones entre las tablas están diseñadas para preservar la integridad referencial y facilitar consultas relacionales. Por ejemplo, la relación entre
prestamoycopiaasegura que solo se puedan prestar copias existentes, y la relación entrepelicula,genero, ydirectorpermite una organización clara de la información de películas.
El script SQL proporcionado crea la estructura de la base de datos, incluidas todas las tablas y relaciones mencionadas. Para utilizar este script:
Ejecuta el script en tu sistema de gestión de base de datos para crear el esquema.
En este proyecto, utilizamos varias consultas SQL para extraer información significativa de la base de datos. Dos consultas son particularmente importantes para la operación del videoclub:
Para identificar qué películas están disponibles para alquilar en este momento, utilizamos la siguiente consulta:
-- Consulta 1: Películas disponibles para alquilar en este momento
SELECT p.titulo, COUNT(*) AS copias_disponibles
FROM pelicula p
JOIN copia c ON p.id_pelicula = c.id_pelicula
LEFT JOIN prestamo pr ON c.id = pr.id
WHERE pr.id IS NULL OR pr.fecha_devolucion IS NOT NULL
GROUP BY p.titulo;Esta consulta emplea un LEFT JOIN para incluir todas las copias de películas, independientemente de si están actualmente prestadas. Esto asegura que incluso las copias que nunca han sido prestadas se cuenten como disponibles. El WHERE pr.id IS NULL OR pr.fecha_devolucion IS NOT NULL permite filtrar las copias que están disponibles para ser alquiladas, ya sea porque no han sido prestadas o porque el préstamo ha sido devuelto.
Para determinar el género favorito de cada socio basado en sus préstamos, utilizamos la siguiente consulta:
-- Consulta 2: Género favorito de cada socio
SELECT s.id_socio, s.nombre, s.apellido1, s.apellido2, g.nombre_genero AS genero_favorito
FROM socio s
LEFT JOIN (
SELECT s.id_socio, p.id_genero, COUNT(*) AS cantidad
FROM prestamo pr
JOIN copia c ON pr.id = c.id
JOIN pelicula p ON c.id_pelicula = p.id_pelicula
JOIN socio s ON pr.id_socio = s.id_socio
GROUP BY s.id_socio, p.id_genero
ORDER BY s.id_socio, cantidad DESC
) AS subquery ON s.id_socio = subquery.id_socio
LEFT JOIN genero g ON subquery.id_genero = g.id_genero
GROUP BY s.id_socio, s.nombre, g.nombre_genero;Esta consulta utiliza LEFT JOIN para asegurar que todos los socios sean incluidos en los resultados, incluso aquellos que no han realizado ningún préstamo. De esta manera, podemos identificar el género favorito de cada socio basándonos en la cantidad de préstamos de películas de cada género, incluyendo a los socios sin préstamos (para quienes el género favorito será NULL).
La decisión de utilizar LEFT JOIN en estas consultas se tomó para maximizar la inclusividad de los datos, asegurando que toda la información relevante sea considerada, independientemente de la presencia o ausencia de préstamos. Esto permite una visión completa y precisa del inventario y las preferencias de los socios, crucial para la operación efectiva del videoclub.
Este diseño de base de datos para un videoclub ofrece una solución robusta y escalable para la gestión de datos de socios, películas, y préstamos. La estructura normalizada y las relaciones cuidadosamente planificadas aseguran la integridad de los datos y facilitan la extensión del sistema para satisfacer necesidades futuras.