✅ Titolo del progetto
Progettazione di una base dati per la gestione di una biblioteca
1. Analisi dei Requisiti
🎯 Obiettivi
Realizzare un sistema informativo per:
-
Gestire il catalogo dei libri
-
Gestire gli utenti iscritti
-
Registrare i prestiti e le restituzioni
-
Tenere traccia della disponibilità dei volumi
-
Gestire le prenotazioni
📌 Funzionalità richieste
-
Inserimento e modifica di libri, autori e copie
-
Registrazione utenti (studenti, docenti…)
-
Prestito e restituzione dei libri
-
Prenotazioni in coda se il libro è occupato
-
Statistiche sui prestiti
2. Entità principali
-
Libro
-
Autore
-
Utente
-
Copia
-
Prestito
-
Prenotazione
3. Relazioni tra le entità
-
Ogni libro può avere più autori (relazione N:N)
-
Ogni libro ha una o più copie
-
Ogni utente può fare più prestiti
-
Ogni utente può fare più prenotazioni
-
Ogni copia può essere in prestito solo a un utente per volta
4. Modello Entità-Relazioni (ER)
✏️ Entità e Attributi
-
Libro (CodLibro, Titolo, Genere, AnnoPubblicazione, Editore)
-
Autore (CodAutore, Nome, Cognome)
-
Utente (CodUtente, Nome, Cognome, TipoUtente, Email)
-
Copia (CodCopia, CodLibro FK, Stato)
-
Prestito (CodPrestito, CodUtente FK, CodCopia FK, DataInizio, DataFine)
-
Prenotazione (CodPrenotazione, CodUtente FK, CodLibro FK, DataPrenotazione)
🔄 Relazioni
-
Libro ↔ Autore (N:N) → tabella LibroAutore
-
Libro ↔ Copia (1:N)
-
Copia ↔ Prestito (1:N)
-
Utente ↔ Prestito (1:N)
-
Utente ↔ Prenotazione (1:N)
-
Libro ↔ Prenotazione (1:N)
5. Modello Relazionale
Libro(CodLibro PK, Titolo, Genere, AnnoPubblicazione, Editore)
Autore(CodAutore PK, Nome, Cognome)
LibroAutore(CodLibro FK, CodAutore FK, PRIMARY KEY (CodLibro, CodAutore))
Utente(CodUtente PK, Nome, Cognome, TipoUtente, Email)
Copia(CodCopia PK, CodLibro FK, Stato)
Prestito(CodPrestito PK, CodUtente FK, CodCopia FK, DataInizio, DataFine)
Prenotazione(CodPrenotazione PK, CodUtente FK, CodLibro FK, DataPrenotazione)
6. Popolamento della Base Dati (esempi)
-- Libri e Autori
INSERT INTO Libro VALUES ('LB001', 'Il nome della rosa', 'Giallo', 1980, 'Bompiani');
INSERT INTO Autore VALUES ('AU001', 'Umberto', 'Eco');
INSERT INTO LibroAutore VALUES ('LB001', 'AU001');
-- Utenti
INSERT INTO Utente VALUES ('UT001', 'Sara', 'Verdi', 'Studente', Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.');
-- Copie
INSERT INTO Copia VALUES ('CP001', 'LB001', 'Disponibile');
INSERT INTO Copia VALUES ('CP002', 'LB001', 'Prestato');
-- Prestiti
INSERT INTO Prestito VALUES ('PR001', 'UT001', 'CP002', '2025-03-01', '2025-03-15');
-- Prenotazioni
INSERT INTO Prenotazione VALUES ('PN001', 'UT001', 'LB001', '2025-03-02');
7. Test delle Query
🔹 Elenco libri disponibili
SELECT L.Titolo, C.CodCopia
FROM Libro L
JOIN Copia C ON L.CodLibro = C.CodLibro
WHERE C.Stato = 'Disponibile';
🔹 Prestiti attivi di un utente
SELECT P.CodPrestito, L.Titolo, P.DataInizio, P.DataFine
FROM Prestito P
JOIN Copia C ON P.CodCopia = C.CodCopia
JOIN Libro L ON C.CodLibro = L.CodLibro
WHERE P.CodUtente = 'UT001';
🔹 Libri prenotati da un utente
SELECT L.Titolo, PR.DataPrenotazione
FROM Prenotazione PR
JOIN Libro L ON PR.CodLibro = L.CodLibro
WHERE PR.CodUtente = 'UT001';
🔹 Autori di un libro
SELECT A.Nome, A.Cognome
FROM Autore A
JOIN LibroAutore LA ON A.CodAutore = LA.CodAutore
WHERE LA.CodLibro = 'LB001';
8. Conclusioni
Il sistema informativo per la gestione della biblioteca consente:
-
Il tracciamento completo dei libri e delle copie
-
La gestione di prestiti e prenotazioni con integrità
-
La possibilità di estendere il database a più sedi o anche a ebook
PROGETTAZIONE DB ACCESS GESTIONE BIBLIOTECA. (MODELLO 2)
📌 Fasi della Progettazione di una Base Dati
1️⃣ ANALISI DEI REQUISITI
Prima di progettare il database, definiamo le informazioni che dobbiamo gestire:
✅ Libri: titolo, autore, editore, anno di pubblicazione, genere, copie disponibili.
✅ Utenti: nome, cognome, contatto, data di registrazione.
✅ Prestiti: chi ha preso un libro, quando, e la data di restituzione.
✅ Dipendenti: chi lavora in biblioteca, ruolo e contatti.
2️⃣ PROGETTAZIONE CONCETTUALE (ER Model)
Creiamo un diagramma Entità-Relazione (ER) con le seguenti entità:
-
Libri 📚
-
Utenti 👤
-
Prestiti 🔄
-
Dipendenti 👨💼
Le relazioni principali sono:
📌 Un utente può prendere in prestito più libri → Relazione 1:N
📌 Un libro può essere preso in prestito da più utenti nel tempo → Relazione 1:N
📌 Un dipendente gestisce i prestiti → Relazione 1:N
3️⃣ PROGETTAZIONE LOGICA (Tabelle e Attributi)
Creiamo le tabelle con i relativi campi.
📚 Tabella: Libri
|
Campo |
Tipo |
Descrizione |
|---|---|---|
|
ID_Libro |
AutoNumero (PK) |
Identificativo univoco |
|
Titolo |
Testo |
Titolo del libro |
|
Autore |
Testo |
Autore del libro |
|
Editore |
Testo |
Casa editrice |
|
Anno |
Numero |
Anno di pubblicazione |
|
Genere |
Testo |
Categoria del libro |
|
Copie |
Numero |
Numero di copie disponibili |
👤 Tabella: Utenti
|
Campo |
Tipo |
Descrizione |
|---|---|---|
|
ID_Utente |
AutoNumero (PK) |
Identificativo univoco |
|
Nome |
Testo |
Nome e cognome dell'utente |
|
Telefono |
Testo |
Numero di contatto |
|
|
Testo |
Email dell'utente |
|
Data_Registrazione |
Data |
Data di iscrizione alla biblioteca |
🔄 Tabella: Prestiti
|
Campo |
Tipo |
Descrizione |
|---|---|---|
|
ID_Prestito |
AutoNumero (PK) |
Identificativo del prestito |
|
ID_Utente |
Numero (FK) |
Utente che ha preso in prestito il libro |
|
ID_Libro |
Numero (FK) |
Libro preso in prestito |
|
Data_Prestito |
Data |
Data di inizio prestito |
|
Data_Restituzione |
Data |
Data prevista di restituzione |
|
Restituito |
Sì/No |
Se il libro è stato restituito |
👨💼 Tabella: Dipendenti
|
Campo |
Tipo |
Descrizione |
|---|---|---|
|
ID_Dipendente |
AutoNumero (PK) |
Identificativo del dipendente |
|
Nome |
Testo |
Nome del dipendente |
|
Ruolo |
Testo |
Mansione (Bibliotecario, Responsabile, etc.) |
|
Contatto |
Testo |
Numero o email |
4️⃣ PROGETTAZIONE FISICA (Creazione in Microsoft Access o SQL)
Dopo aver progettato la struttura, possiamo creare il database in Microsoft Access o SQL.
Relazioni tra le tabelle
Collega le tabelle:
🔹 Libri → Prestiti (1 a molti)
🔹 Utenti → Prestiti (1 a molti)
🔹 Dipendenti → Prestiti (1 a molti)
⚠ Attiva l’integrità referenziale per garantire la coerenza dei dati!
5️⃣ POPOLAMENTO DEL DATABASE (Dati di esempio)
Dopo aver creato il database, inseriamo alcuni dati.
📚 Libri
|
ID_Libro |
Titolo |
Autore |
Editore |
Anno |
Genere |
Copie |
|---|---|---|---|---|---|---|
|
1 |
Il Signore degli Anelli |
J.R.R. Tolkien |
Mondadori |
1954 |
Fantasy |
5 |
|
2 |
1984 |
George Orwell |
Feltrinelli |
1949 |
Distopico |
3 |
👤 Utenti
🔄 Prestiti
|
ID_Prestito |
ID_Utente |
ID_Libro |
Data_Prestito |
Data_Restituzione |
Restituito |
|---|---|---|---|---|---|
|
1 |
1 |
1 |
2024-03-10 |
2024-03-25 |
No |
|
2 |
2 |
2 |
2024-03-12 |
2024-03-27 |
No |
👨💼 Dipendenti
|
ID_Dipendente |
Nome |
Ruolo |
Contatto |
|---|---|---|---|
|
1 |
Laura Verdi |
Bibliotecaria |
333111222 |