< Home
Stampa

Esercizi database

Sommario

Schema logico

  1. Data questo schema concettuale disegnare lo schema logico, e popolare le tabelle con dei valori di esempio.

2. Data questo schema concettuale disegnare lo schema logico, e popolare le tabelle con dei valori di esempio.

3. Data la seguente tabella di immobili:

CodiceImmobileDataInserimentoTipoImmobileNomeProprietarioCognomeProprietarioEmailProprietarioTelefonoProprietarioViaIndirizzoCittaIndirizzoCAPCittaRegioneZonaNumeroLocaliMqTotaliPianoPrezzoEuroStatoAnnuncio
IMM-20012026-04-01AppartamentoMarioRossimrossi@es.it3331234567Via Roma 10Milano20121LombardiaCentro3852250.000Disponibile
IMM-20012026-04-01AppartamentoMarioRossimrossi@es.it3331234567Via Roma 10Milano20121LombardiaCentro3852250.000Disponibile
IMM-20022026-04-03AppartamentoBiancaBrunobbruno@es.it3397654321Piazza Duomo 5Milano20123LombardiaCentro Storico2605180.000Venduto
IMM-20032026-04-10VillaGiovanniNerigneri@es.it3471112233Via Garibaldi 20Torino10123PiemonteCollina62501480.000Disponibile
IMM-20032026-04-10VillaGiovanniNerigneri@es.it3471112233Via Garibaldi 20Torino10123PiemonteCollina62501480.000Disponibile
IMM-20032026-04-10VillaGiovanniNerigneri@es.it3471112233Via Garibaldi 20Torino10123PiemonteCollina62501480.000Disponibile
IMM-20042026-05-12AppartamentoLauraVerdilverdi@es.it3405556677Via Roma 10Milano20121LombardiaCentro3904275.000Disponibile
IMM-20042026-05-12AppartamentoLauraVerdilverdi@es.it3405556677Via Roma 10Milano20121LombardiaCentro3904275.000Disponibile
IMM-20052026-05-18AppartamentoMarioRossimrossi@es.it3331234567Via Roma 10Milano20121LombardiaCentro41203320.000Disponibile

Creare lo schema logico seguendo le regole sulle chiavi.

4. Data la seguente tabella:

CodiceIscrizioneDataIscrizioneNomeCorsoGiornoSettimanaOraInizioOreTotaliNomeIstruttoreCognomeIstruttoreEmailIstruttoreQualificaIstruttoreNomeStudenteCognomeStudenteCFStudenteTelefonoStudenteViaIndirizzoCittaIndirizzoCAPCittaQuotaPagataEuro
ISC-30012026-09-05Yoga BaseLunedì18:0032AnnaBianchiabianchi@assoc.itIstruttore ALucaContiCNTLCU85A01F205Z3481234567Via Verdi 8Bologna40126350
ISC-30012026-09-05Yoga BaseLunedì18:0032AnnaBianchiabianchi@assoc.itIstruttore ALucaContiCNTLCU85A01F205Z3481234567Via Verdi 8Bologna40126350
ISC-30022026-09-08Nuoto Livello 2Mercoledì17:3040PaoloEspositopesposito@assoc.itIstruttore BSaraMorettiMORTSR90B42H501W3397654321Corso Francia 22Bologna40127500
ISC-30032026-09-15Yoga BaseLunedì18:0032AnnaBianchiabianchi@assoc.itIstruttore ASaraMorettiMORTSR90B42H501W3397654321Corso Francia 22Bologna40127350
ISC-30042026-10-01Yoga AvanzatoGiovedì19:0032AnnaBianchiabianchi@assoc.itIstruttore AMarcoFerrariFRRMRC88C15F205Y3471112233Via Verdi 8Bologna40126450
ISC-30042026-10-01Yoga AvanzatoGiovedì19:0032AnnaBianchiabianchi@assoc.itIstruttore AMarcoFerrariFRRMRC88C15F205Y3471112233Via Verdi 8Bologna40126450
ISC-30052026-10-10Nuoto Livello 2Mercoledì17:3040PaoloEspositopesposito@assoc.itIstruttore BMarcoFerrariFRRMRC88C15F205Y3471112233Via Verdi 8Bologna40126500

Crearne lo schema logico scomponendo le entità secondo la regola delle chiavi.

Normalizzazione

  1. Portare le seguenti tabelle in 1NF:

a)

MatricolaNomeCognomeCorsi_iscritti
726265Mario Rossi“INF-01, MAT-01”
726266Bianca Bruno“INF-01, FIS-02”
726267Giovanni Neri“INF-02”
726268Laura Verdi“LET-01, LET-02, INF-01”

b)

MatricolaNomeCognomeCorsi_Frequentati
12345Mario Rossi“Matematica, Fisica”
12346Anna Bianchi“Informatica, Storia, Filosofia”
12347Luca Verdi“Biologia”

2. Portare le seguenti tabelle in 2NF:

a)

Codice_VenditaCodice_ProdottoNome_ProdottoPrezzo_UnitarioQuantitàData_Vendita
V-01P-100Mouse Logitech35,00210/06/2024
V-01P-200Tastiera Cherry80,00110/06/2024
V-02P-300Monitor LG150,00112/06/2024

b)

MatricolaCodice_CorsoNome_CorsoData_EsameVoto
12345INF-01Programmazione01/06/202430
12345MTD-01Matematica05/06/202428
12346INF-01Programmazione01/06/202427

c)

Codice_VenditaCodice_ProdottoNome_ProdottoPrezzo_UnitarioQuantita
V-100P-1Mouse25,00 €3
V-100P-2Tastiera45,00 €1
V-101P-3Monitor150,00 €2

d)

Numero_FatturaCodice_ArticoloNome_ArticoloCategoriaImporto_Riga
FAT-01ART-ACavo USBAccessori5,00 €
FAT-01ART-BHard DiskComponenti80,00 €
FAT-02ART-ACavo USBAccessori5,00 €

e)

Codice_PrenotazioneNumero_CamaraTipo_CameraTariffa_NottataDate_Soggiorno
PR-501101Doppia Standard100,00 €20/06-25/06
PR-501102Singola Deluxe80,00 €20/06-25/06
PR-502103Doppia Deluxe120,00 €21/06-22/06

3. Portare le seguenti tabelle in 3NF:

a)

MatricolaNomeCognomeCorsoDiLaureaSede_Corso
12345Mario RossiInformaticaPalazzo A
12346Anna BianchiLettereBiblioteca Centrale
12347Luca VerdiInformaticaPalazzo A

b)

Id_DipendenteNomeDipendenteCodice_UfficioCitta_Ufficio
D-100Marco RossiUFF-MIMilano
D-200Laura BianchiUFF-RMRoma
D-300Luca VerdiUFF-MIMilano

c)

Id_ProdottoNomeProdottoCodice_CategoriaManager_Categoria
P-101Mouse LogitechCAT-ELEDott. Smith
P-202Tastiera CherryCAT-ELEDott. Smith
P-303Monitor LGCAT-OPTDott. Jones

d)

Id_ClienteNomeClienteProvinciaZona_Spedizione
C-501Azienda Alfa SrlMilanoNord-Est
C-502Società Beta SpaVeneziaNord-Est
C-503Ditta Gamma SncRomaCentro

e)

Numero_OrdineClienteCodice_MagazzinoCitta_Magazzino
ORD-901Mario RossiMAG-CENTRALEBologna
ORD-902Anna BianchiMAG-NORDMilano
ORD-903Luca VerdiMAG-CENTRALEBologna

4. Portare le seguenti tabelle in BCNF:

a)

StudenteCorsoTitolo_Corso
MariaMatematicaAnalisi I
MariaFisicaMeccanica
LucaMatematicaAnalisi I

b)

ProdottoFornitorePaese_Fornitore
MouseAcme CorpUSA
TastieraAcme CorpUSA
MonitorBeta LtdCina

c)

EventoSalaCitta_Sala
Conferenza ASala 101Milano
Seminario BSala 102Milano
Conferenza ASala 205Torino

d)

DocumentoLingua_TraduzioneNome_Lingua
Doc-01ITItaliano
Doc-01ENInglese
Doc-02ITItaliano

e)

MatricolaCorsoDocente
101INF-01Prof. Rossi
102INF-01Prof. Rossi
103MAT-02Prof. Bianchi
104INF-01Prof. Verdi

f)

Id_DipendenteCodice_FiscaleNomeCognome
D-100RSSMRA80A01F205ZMarioRossi
D-101BRNBNC82B42H501WBiancaBruno
D-102GVNNNL85C15F205YGiovanniNeri

DDL

Create

  1. Crea la tabella GENERE con gli attributi Id INT AUTO_INCREMENT, Descrizione VARCHAR(100) NOT NULL. Imposta la chiave primaria su Id e aggiungi un vincolo UNIQUE sull’attributo Descrizione.
  2. Crea la tabella SUPPORTO con gli attributi Id INT AUTO_INCREMENT, Descrizione VARCHAR(100) NOT NULL. Imposta la chiave primaria su Id.
  3. Crea la tabella AUTORE con gli attributi Id INT AUTO_INCREMENT, Nome VARCHAR(100) NOT NULL, Cognome VARCHAR(100) NOT NULL. Imposta la chiave primaria su Id.
  4. Crea la tabella CASA_DISCOGRAFICA con gli attributi Id INT AUTO_INCREMENT, Nome VARCHAR(150) NOT NULL. Imposta la chiave primaria su Id e aggiungi un vincolo UNIQUE sull’attributo Nome.
  5. Crea la tabella ALBUM con gli attributi Id INT AUTO_INCREMENT, Titolo VARCHAR(200) NOT NULL, Anno INT NOT NULL, CasaDiscograficaId INT NOT NULL, AutoreId INT. Imposta la chiave primaria su Id e aggiungi due chiavi esterne: una da CasaDiscograficaId a CASA_DISCOGRAFICA(Id) e una da AutoreId a AUTORE(Id).
  6. Crea la tabella CONTRATTO con gli attributi Id INT AUTO_INCREMENT, Durata INT NOT NULL, AutoreId INT NOT NULL, CasaDiscograficaId INT NOT NULL. Imposta la chiave primaria su Id e aggiungi due chiavi esterne: una da AutoreId a AUTORE(Id) con ON DELETE CASCADE e una da CasaDiscograficaId a CASA_DISCOGRAFICA(Id).
  7. Crea la tabella CANZONE con gli attributi Id INT AUTO_INCREMENT, Titolo VARCHAR(200) NOT NULL, AlbumId INT NOT NULL. Imposta la chiave primaria su Id e aggiungi una chiave esterna da AlbumId a ALBUM(Id) con ON DELETE CASCADE.
  8. Crea la tabella BOOKLET con gli attributi Id INT AUTO_INCREMENT, Pagine INT NOT NULL, AlbumId INT NOT NULL. Imposta la chiave primaria su Id e aggiungi una chiave esterna da AlbumId a ALBUM(Id) con ON DELETE CASCADE.
  9. Crea la tabella di relazione ALBUM_GENERE con gli attributi AlbumId INT NOT NULL, GenereId INT NOT NULL. Imposta una chiave primaria composta su entrambi gli attributi e aggiungi due chiavi esterne: da AlbumId a ALBUM(Id) con ON DELETE CASCADE e da GenereId a GENERE(Id) con ON DELETE CASCADE.
  10. Crea la tabella di relazione ALBUM_SUPPORTO con gli attributi AlbumId INT NOT NULL, SupportoId INT NOT NULL. Imposta una chiave primaria composta su entrambi gli attributi e aggiungi due chiavi esterne: da AlbumId a ALBUM(Id) con ON DELETE CASCADE e da SupportoId a SUPPORTO(Id) con ON DELETE CASCADE.

Alter-Drop

  1. Aggiungi alla tabella AUTORE la colonna Nazionalita VARCHAR(50) DEFAULT 'Italiana'.
  2. Modifica nella tabella ALBUM la colonna Titolo, impostandola come VARCHAR(500) NOT NULL.
  3. Rinomina nella tabella CASA_DISCOGRAFICA la colonna Nome in RagioneSociale VARCHAR(250) NOT NULL.
  4. Elimina dalla tabella ALBUM la colonna Anno.
  5. Rimuovi dalla tabella CANZONE il vincolo di chiave esterna denominato FK_Canzone_Album.
  6. Nella tabella CANZONE rimuovi prima il vincolo FK_Canzone_Album, poi riaggiungilo con comportamento ON DELETE RESTRICT.
  7. Rimuovi dalla tabella BOOKLET la chiave primaria con il comando DROP PRIMARY KEY.
  8. Rinomina la tabella CASA_DISCOGRAFICA in ETICHETTA_DISCOGRAFICA.
  9. Elimina la tabella ALBUM_GENERE e successivamente elimina la tabella GENERE, rispettando l’ordine delle dipendenze.
  10. Elimina la tabella GENERE usando la clausola IF EXISTS e infine elimina l’intero database con il comando DROP DATABASE.

Esercizi di DDL strutturati

Nei seguenti esercizi viene proposto di creare un database, con un insieme di tabelle, attributi e vincoli. Scrivere le istruzioni DDL per crearli.

Esercizio 1: Libreria di Libri

Schema:

  • Autore (IdPK, Nome)
  • Editore (IdPK, RagioneSociale)
  • Libro (IdPK, Titolo, AutoreIdFK, EditoreIdFK)
  • Recensione (IdPK, Voto, LibroIdFK)

Vincoli:

  • Libro.AutoreId -> Autore.Id (ON DELETE RESTRICT)
  • Libro.EditoreId -> Editore.Id (ON DELETE CASCADE)
  • Recensione.LibroId -> Libro.Id (ON DELETE CASCADE)

Esercizio 2: Gestione Personale Aziendale

Schema:

  • Dipartimenti (IdPK, Nome)
  • Manager (IdPK, Nome, DipartimentoIdFK)
  • Dipendenti (IdPK, Nome, ManagerIdFK, DipartimentoIdFK)
  • Progetti (IdPK, Titolo)

Vincoli:

  • Dipendenti.ManagerId -> Manager.Id (ON DELETE SET NULL)
  • Dipendenti.DipartimentoId -> Dipartimenti.Id (ON DELETE RESTRICT)
  • Manager.DipartimentoId -> Dipartimenti.Id (ON DELETE RESTRICT)

Esercizio 3: E-commerce

Schema:

  • Clienti (IdPK, Nome)
  • Prodotti (IdPK, Nome, Prezzo)
  • Ordini (IdPK, Data, ClienteIdFK)
  • CestinoOrdine (OrdineIdFK, ProdottoIdFK, Quantita)

Vincoli:

  • Ordini.ClienteId -> Clienti.Id (ON DELETE CASCADE)
  • CestinoOrdine.OrdineId -> Ordini.Id (ON DELETE CASCADE)
  • CestinoOrdine.ProdottoId -> Prodotti.Id (ON DELETE RESTRICT)

Esercizio 4: Anagrafe Studentesca

Schema:

  • Corso (IdPK, Nome)
  • Studente (IdPK, Matricola, CorsoIdFK)
  • Esame (IdPK, CFU, CorsoIdFK)
  • Voto (StudenteIdFK, EsameIdFK, Punteggio)

Vincoli:

  • Studente.CorsoId -> Corso.Id (ON DELETE RESTRICT)
  • Voto.StudenteId -> Studente.Id (ON DELETE CASCADE)
  • Voto.EsameId -> Esame.Id (ON DELETE RESTRICT)

Esercizio 5: Sistema di Prenotazione Hotel

Schema:

  • Camera (IdPK, Tipo)
  • Cliente (IdPK, Nome)
  • Prenotazione (IdPK, DataInizio, CameraIdFK, ClienteIdFK)

Vincoli:

  • Prenotazione.CameraId -> Camera.Id (ON DELETE RESTRICT)
  • Prenotazione.ClienteId -> Cliente.Id (ON DELETE CASCADE)

Esercizio 6: Gestione Biblioteca Video

Schema:

  • Regista (IdPK, Nome)
  • Attore (IdPK, Nome)
  • Film (IdPK, Titolo, RegistaIdFK)
  • Cast (FilmIdFK, AttoreIdFK)

Vincoli:

  • Film.RegistaId -> Regista.Id (ON DELETE SET NULL)
  • Cast.FilmId -> Film.Id (ON DELETE CASCADE)
  • Cast.AttoreId -> Attore.Id (ON DELETE RESTRICT)

Esercizio 7: Farmacia

Schema:

  • Medicamento (IdPK, Nome)
  • Fornitore (IdPK, RagioneSociale)
  • Scadenza (MedicamentoIdFK, DataScadenza)
  • Vendita (IdPK, MedicamentoIdFK, FornitoreIdFK)

Vincoli:

  • Scadenza.MedicamentoId -> Medicamento.Id (ON DELETE CASCADE)
  • Vendita.MedicamentoId -> Medicamento.Id (ON DELETE RESTRICT)
  • Vendita.FornitoreId -> Fornitore.Id (ON DELETE RESTRICT)

Esercizio 8: Social Network

Schema:

  • Utente (IdPK, Username)
  • Post (IdPK, Testo, UtenteIdFK)
  • Commento (IdPK, Testo, PostIdFK, UtenteIdFK)

Vincoli:

  • Post.UtenteId -> Utente.Id (ON DELETE CASCADE)
  • Commento.PostId -> Post.Id (ON DELETE CASCADE)
  • Commento.UtenteId -> Utente.Id (ON DELETE RESTRICT)

Esercizio 9: Gestione Magazzino

Schema:

  • Sede (IdPK, Indirizzo)
  • Prodotto (IdPK, SKU)
  • Magazzino (SedeIdFK, ProdottoIdFK, Quantita)

Vincoli:

  • Magazzino.SedeId -> Sede.Id (ON DELETE RESTRICT)
  • Magazzino.ProdottoId -> Prodotto.Id (ON DELETE CASCADE)

Esercizio 10: Sistema di Biglietteria

Schema:

  • Evento (IdPK, Nome)
  • Sala (IdPK, Nome)
  • Posto (IdPK, Numero, SalaIdFK)
  • Biglietto (IdPK, EventoIdFK, PostoIdFK)

Vincoli:

  • Posto.SalaId -> Sala.Id (ON DELETE CASCADE)
  • Biglietto.EventoId -> Evento.Id (ON DELETE RESTRICT)
  • Biglietto.PostoId -> Posto.Id (ON DELETE RESTRICT)

Progettazione

Per ogni progetto:

  1. Definire diagramma E/R
  2. Diagramma logico
  3. Regole di normalizzazione
  4. Scrivere le Query DDL di generazione
  5. Popolamento (usare un generatore Dati, come un LLM).
  6. Svolgere infine le query indicate dall’esercizio.

Gestione biblioteca scolastica

Una Biblioteca ha un catalogo di Libri, ciascuno caratterizzato da un ISBN, un titolo e un anno di pubblicazione. Ogni libro appartiene a un genere e può essere scritto da uno o più Autori, di cui si memorizzano codice autore, nome e nazionalità. I Lettori registrati (identificati da codice fiscale, nome, cognome ed email) possono effettuare dei Prestiti. Un prestito riguarda un singolo libro, viene effettuato in una data di inizio e prevede una data di restituzione prevista e una data di restituzione effettiva.

Entità attese: Libro, Autore, Lettore, Prestito.

Popolamento: Inserire 500 libri, con almeno 100 autori. Inserire 100 utenti, e uno storico di almeno 200 prestiti.

Query:

  1. Autore con più libri
  2. Lettore con più prestiti
  3. Libri in prestito attualmente
  4. Libro più prestato.

Piattaforma E-Commerce

Un Cliente (identificato da id cliente, nome, cognome, email) può registrare uno o più Indirizzi di spedizione (id indirizzo, via, cap, città). Il cliente effettua Ordini d’acquisto (id ordine, data, stato), indicando l’indirizzo di spedizione prescelto. Un ordine è composto da più VociOrdine; ogni voce d’ordine fa riferimento a un singolo Prodotto e specifica la quantità acquistata e il prezzo unitario applicato al momento della vendita. I prodotti (id prodotto, nome, prezzo di listino) sono suddivisi in Categorie (id categoria, nome categoria). Ciascun prodotto appartiene a una sola categoria.

Entità attese: Cliente, Indirizzo, Ordine, VoceOrdine, Prodotto, Categoria.

Popolamento: 100 prodotti, 10 categorie, 30 clienti, 40 indirizzi, 60 ordini, con mediamente da 2 a 5 voci per ordine.

Query:

  1. Indicare totale medio per ordine
  2. Numero ordini per cliente
  3. Cliente con più ordini
  4. Prodotto più venduto
  5. Categoria con più prodotti venduti

Centro medico

Un Paziente (codice fiscale, nome, cognome, data di nascita) può prenotare diverse Visite mediche. Ogni visita si svolge in una determinata data e ora, presso un Ambulatorio (numero stanza, piano) ed è condotta da un Medico (matricola, nome, cognome). Un medico afferisce a una o più Specializzazioni (codice, nome specializzazione). Al termine della visita viene redatto un singolo Referto (id referto, diagnosi, data redazione). Durante la visita, il medico può eseguire la Prescrizione di uno o più Farmaci (codice AIC, nome commerciale) .

Entità attese: Paziente, Visita, Ambulatorio, Medico, Specializzazione, Referto, Prescrizione, Farmaco

Popolamento: 100 pazienti, 10 medici, 5 specializzazioni, 2 ambulatori, 200 referti, 100 prescrizioni, 20 farmaci

Query:

  1. Numero visite per ambulatorio
  2. Numero visite per specializzazione
  3. Paziente con più visite
  4. Medico con più visite
  5. Farmaco maggiormente prescritto
  6. Paziente con più prescrizioni

Gestione progetti aziendali

Un Dipendente (matricola, codice fiscale, nome, cognome) lavora all’interno di un Dipartimento (codice dipartimento, nome), il quale è diretto da un solo dipendente responsabile. I dipendenti vengono assegnati a diversi Progetti (codice progetto, nome, budget) con un dipendente che ne è responsabile; l’assegnazione prevede una data inizio, una data fine e un Ruolo coperto (codice ruolo, descrizione). Ogni progetto è commissionato da un Cliente (partita IVA, ragione sociale). Nel tempo, un dipendente subisce variazioni di stipendio: si vuole tracciare lo StoricoStipendio (id storico, data decorrenza, importo mensile).

Entità attese: Dipendente, Dipartimento, Progetto, Ruolo, Cliente, StoricoStipendio 

Popolamento: 30 dipendenti, 5 dipartimenti, 12 progetti, 5 ruoli, 6 clienti, 50 storici stipendio

Query:

  1. Dipendente più pagato e meno pagato
  2. Elenco di dipendenti attualmente su più progetti, con relativo ruolo
  3. Dipartimento con più persone attualmente coinvolte in progetti
  4. Cliente che ha speso più budget
  5. Dipendente che ha ricevuto più cambi di stipendio

Assistenza IT

L’azienda gestisce Utenti (id utente, email, password) che si dividono nelle specializzazioni ClienteFinale (codice cliente, azienda) e Tecnico (matricola). Un ClienteFinale apre dei Ticket di assistenza (codice ticket, oggetto, data apertura, priorità, data ultimo intervento, note tecniche). Ciascun ticket è associato a una Categoria (id categoria, nome) e riguarda uno specifico Asset (codice inventario, tipo apparato, modello). Ogni ticket può subire diversi cambi di Stato, memorizzati in uno StoricoStato (data cambio, stato raggiunto, tecnico).

Entità attese: Utente, ClienteFinale, Tecnico, Ticket, Categoria, Asset,Stato, StoricoStato.

Popolamento: 30 utenti, 25 clienti finali, 5 tecnici, 100 ticket, 15 asset, 5 categorie, 3 stati (creato, preso in carico, chiuso), 250 storicistato.

Query:

  1. ClienteFinale che ha aperto più ticket
  2. Tecnico che ha gestito più ticket
  3. Numero di ticket presi in carico per tecnico
  4. Numero di ticket chiusi per tecnico
  5. Asset con più ticket
  6. Categoria con più ticket aperti
  7. Tecnico con più operazioni su una certa categoria