Diseña un esquema relacional para una biblioteca (libros, autores, socios, préstamos). Explica las relaciones.
Respuesta
authors(id, name), books(id, title, isbn UNIQUE), members(id, name, email UNIQUE).- Libro y autor es muchos a muchos (un libro puede tener varios autores): tabla de unión
book_authors(book_id, author_id). - Un libro puede tener varias copias físicas:
copies(id, book_id FK, status). loans(id, copy_id FK, member_id FK, loaned_at, due_at, returned_at NULL): uno a muchos de socio a préstamos y de copia a préstamos.- Restricciones: primary keys, foreign keys, NOT NULL, UNIQUE (isbn, email), CHECK (due_at > loaned_at).
- Índices en las foreign keys y en las columnas de búsqueda (title). Normaliza hasta 3NF; desnormaliza solo con un motivo medido.
- Ejemplo de consulta: socios con préstamos vencidos:
WHERE returned_at IS NULL AND due_at < now().
Practica esta pregunta en Repaso