Si desidera progettare una base di dati per gestire il prestito dei libri.
- Libri: Di ogni libro si vuole memorizzare il codice ISBN (univoco), il titolo e l’anno di pubblicazione.
- Autori: Per ogni autore salviamo il codice autore, il nome e il cognome. Un libro può essere scritto da più autori e un autore può aver scritto più libri.
- Utenti: Dobbiamo registrare chi prende i libri. Ci servono il Codice Fiscale, il nome e l’email.
- Prestiti: Ogni volta che un utente prende un libro, si registra la data di inizio e la data di restituzione prevista. Un utente può effettuare più prestiti nel tempo, ma ogni singolo prestito riguarda un solo libro.
1. Modello Concettuale (Schema E-R)
In questa fase definiamo le Entità e le Relazioni senza preoccuparci troppo dei dettagli tecnici del database.
- Entità:
LIBRO,AUTORE,UTENTE,PRESTITO. - Relazioni:
SCRIVE: Relazione Molti-a-Molti (N:M) traAUTOREeLIBRO.EFFETTUA: Relazione Uno-a-Molti (1:N) traUTENTEePRESTITO(Un utente fa molti prestiti).RELATIVO A: Relazione Uno-a-Molti (1:N) traLIBROePRESTITO(Un libro può essere oggetto di molti prestiti nel tempo).
2. Modello Logico (Relazionale)
Qui trasformiamo il diagramma in tabelle. Ricorda: le relazioni N:M generano una nuova tabella, mentre nelle 1:N si aggiunge una “Foreign Key” (Chiave Esterna). Per semplicità inseriamo pochi attributi non esaustivi in una prova d’esame.
- AUTORE (CodAutore, Nome, Cognome)
- LIBRO (ISBN, Titolo, Anno)
- AUTORE_LIBRO (FK_CodAutore, FK_ISBN) (Tabella ponte per la relazione N:M)
- UTENTE (CodFiscale, Nome, Email)
- PRESTITO (ID_Prestito, DataInizio, DataFine, FK_CodFiscale, FK_ISBN)
Nota: In grassetto le Chiavi Primarie (PK), in corsivo le Chiavi Esterne (FK).
3. Modello Fisico (SQL)
Infine, traduciamo tutto nel linguaggio che il database capisce davvero. Ecco un esempio di come scriveremmo le tabelle in SQL:
SQL
-- Tabella Autori
CREATE TABLE Autore (
CodAutore INT PRIMARY KEY AUTO_INCREMENTNOT NULL,
Nome VARCHAR(50) NOT NULL,
Cognome VARCHAR(50) NOT NULL
);
-- Tabella Libri
CREATE TABLE Libro (
ISBN VARCHAR(20) PRIMARY KEY AUTO_INCREMENTnot null,
Titolo VARCHAR(100) not null,
Anno INT NOT null
);
-- Relazione N:M tra Autori e Libri
CREATE TABLE autorilibri(
codautorilibri INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
CodAutore INT not null,
ISBN VARCHAR(20) not null,
FOREIGN KEY (codAutore) REFERENCES Autore(CodAutore),
FOREIGN KEY (ISBN) REFERENCES Libro(ISBN)
);
-- Tabella Utenti
CREATE TABLE Utente (
CodFiscale VARCHAR(16) PRIMARY KEY not null,
Nome VARCHAR(50) not null,
Email VARCHAR(100) not null
);
-- Tabella Prestiti (Relazioni 1:N incorporate come FK)
CREATE TABLE Prestito (
ID_Prestito INT PRIMARY KEY AUTO_INCREMENT not null,
DataInizio DATE not null,
DataFine DATE not null,
CodFiscale CHAR(16) not null,
ISBN VARCHAR(20) not null,
FOREIGN KEY (CodFiscale) REFERENCES Utente(CodFiscale),
FOREIGN KEY (ISBN) REFERENCES Libro(ISBN)
);


Lascia un commento
Devi essere connesso per inviare un commento.