Diario delle Lezioni - A.A. 2025/2026

Lezione 1: Introduzione al corso

25/02/2026, ore 08:30 (3 ore)
Slides DBMS

  • (1-1)
    Presentazione del corso
  • (1-2)
    Perché le basi di dati sono importanti?
  • (1-3)
    Esempio Esempio Gestire i dati: dai metodi fatti in casa ai server DBMS
  • (1-4)
    Per gestire la persistenza dei dati dobbiamo usare per forza un DBMS?
  • (1-5)
    La scelta del modello per la memorizzazione dei dati: relazionale puro, relazionale a oggetti, document-oriented, key-value, a grafo,...
  • (1-6)
    Perché usiamo (ancora) il modello relazionale? Punti di forza e di debolezza
  • (1-7)
    Esempio Le basi di dati NoSQL document-oriented: punti di forza e di debolezza
  • (1-8)
    Esempio Le basi di dati NoSQL a grafo nelle applicazioni di data analytics
  • (1-9)
    SQL e NoSQL sono veramente mondi isolati?
  • (1-10)
    Esempio Le estensioni NoSQL dei database relazionali (e viceversa)
  • (1-11)
    La scelta del DBMS relazionale: MySQL, PostgreSQL, SQLite,...
  • (1-12)
    Esempio Usi dei DBMS serverless come SQLite
  • (1-13)
    Gli errori più comuni nelle basi di dati e le loro (catastrofiche) conseguenze
  • (1-14)
    Il processo di realizzazione di una base di dati
  • (1-15)
    Le fasi della progettazione: concettuale, logica, fisica
  • (1-16)
    Gli strumenti per ciascuna fase di progettazione
  • (1-17)
    Analisi delle specifiche
  • (1-18)
    Esempio L'Università: analisi dei requisiti

Lezione 2: Modellazione ER 1

26/02/2026, ore 08:30 (2 ore)
Slides ER

  • (2-1)
    La progettazione concettuale
  • (2-2)
    I diagrammi Entità - Relazione
  • (2-3)
    Entità nei diagrammi ER
  • (2-4)
    Esempio L'Università: entità
  • (2-5)
    Attributi nei diagrammi ER
  • (2-6)
    Esempio Attributi ed Entità: come non confondere i due concetti
  • (2-7)
    Esempio L'Università: attributi
  • (2-8)
    Documentazione dei diagrammi ER: i tipi di dato
  • (2-9)
    Attributi composti
  • (2-10)
    Esempio Quando è utile usare un attributo composto
  • (2-11)
    Attributi con molteplicità
  • (2-12)
    Identificare univocamente le istanze di un'entità
  • (2-13)
    Chiavi nelle entità
  • (2-14)
    Scelta della chiave primaria tra le chiavi candidate
  • (2-15)
    Esempio L'Università: chiavi
  • (2-16)
    Esempio Entità (apparentemente) prive di chiave

Lezione 3: Modellazione ER 2

27/02/2026, ore 09:30 (2 ore)
Slides ER

  • (3-1)
    Esempio Il supermercato: entità, attributi e chiavi
  • (3-2)
    Generalizzazione di entità
  • (3-3)
    Generalizzazioni totali e parziali
  • (3-4)
    Esempio Il supermercato: generalizzazioni
  • (3-5)
    Generalizzazioni e chiavi
  • (3-6)
    Esempio L'Azienda: analisi dei requisiti

Lezione 4: Modellazione ER 3

04/03/2026, ore 08:30 (3 ore)
Slides ER

  • (4-1)
    Esempio L'Azienda: entità, attributi e chiavi
  • (4-2)
    Relazioni
  • (4-3)
    Relazioni non binarie
  • (4-4)
    Auto-Relazioni
  • (4-5)
    Ruoli nelle relazioni
  • (4-6)
    Esempio L'azienda: relazioni
  • (4-7)
    Attributi sulle relazioni
  • (4-8)
    Esempio L'azienda: attributi sulle relazioni
  • (4-9)
    Esempio Modellare il concetto di "storico" per un'associazione: soluzioni e considerazioni
  • (4-10)
    Esempio Il supermercato: relazioni
  • (4-11)
    Esempio Il supermercato: attributi sulle relazioni
  • (4-12)
    Relazioni e generalizzazioni

Lezione 5: Modellazione ER 4

05/03/2026, ore 08:30 (2 ore)
Slides ER

  • (5-1)
    Cardinalità delle relazioni
  • (5-2)
    Esempio Il supermercato: relazioni con cardinalità
    materiale ER_Examples - Supermarket
  • (5-3)
    Esempio L'azienda: relazioni con cardinalità
    materiale ER_Examples - Azienda
  • (5-4)
    Esempio L'Università: relazioni con cardinalità
    materiale ER_Examples - CdL
  • (5-5)
    Esempio L'Auto-Relazione mutuazione tra gli insegnamenti
  • (5-6)
    Entità deboli e chiavi con relazioni
  • (5-7)
    Cardinalità ammesse per le relazioni con entità deboli
  • (5-8)
    Esempio L'Università: chiavi per le entità deboli

Lezione 6: Esercitazione finale sui diagrammi ER

06/03/2026, ore 09:30 (2 ore)

  • (6-1)
    Esempio La rivista
  • (6-2)
    La rivista: attributi derivabili
  • (6-3)
    Esempio La rivista: considerazioni sullo storage di binari nei DBMS
  • (6-4)
    Un altro modo per immagazzinare dati non strutturati (come i binari): cenni sugli object storage
    link https://aws.amazon.com/it/what-is/object-storage/
  • (6-5)
    Esempio La rivista: quando una generalizzazione esprime molti più vincoli di una (o due) relazioni
  • (6-6)
    Esempio La rivista: vari modi di modellare il dominio degli autori
  • (6-7)
    Esempio La rivista: vari modi di modellare il sotto-diagramma uscita/pagina/riquadro/contenuto/articolo/figura
  • (6-8)
    Esempio La rivista: diagramma ER finale
    materiale ER_Examples - Rivista

Lezione 7: Ristrutturazione e Ottimizzazione dei diagrammi ER 1

11/03/2026, ore 08:30 (3 ore)
Slides ER-Relazionale

  • (7-1)
    Ristrutturazione dei diagrammi ER
  • (7-2)
    Parametri di ottimizzazione: determinare lo schema di accesso ai dati dalle funzionalità previste
  • (7-3)
    Ristrutturazione: Eliminazione attributi composti
  • (7-4)
    Ristrutturazione: Eliminazione attributi con cardinalità
  • (7-5)
    Esempio Vari modi per ottimizzare l'eliminazione di un attributo con cardinalità
  • (7-6)
    Esempio L'università: l'attributo sillabo... quando è meglio non decomporre troppo ed essere un po' NoSQL
  • (7-7)
    Ristrutturazione: Attributi derivabili
  • (7-8)
    Criteri per l'introduzione o l'eliminazione di un attributo derivabile
  • (7-9)
    Ottimizzare le strutture ER con la ristrutturazione
  • (7-10)
    Ristrutturazione: fusioni e decomposizioni
  • (7-11)
    Decomposizione di entità
  • (7-12)
    Esempio L'università: decomposizione dell'entità insegnamento
  • (7-13)
    Decomposizione di relazioni
  • (7-14)
    Esempio L'azienda: decomposizione della relazione lavora per lo storico degli impieghi

Lezione 8: Ristrutturazione e Ottimizzazione dei diagrammi ER 2

18/03/2026, ore 08:30 (3 ore)
Slides ER-Relazionale

  • (8-1)
    Ristrutturazione: Eliminazione delle gerarchie
  • (8-2)
    Criteri e metodi per l'eliminazione di una gerarchia
  • (8-3)
    Fusione figli-padre: metodo, vincoli, vantaggi, svantaggi
  • (8-4)
    Esempio Le fusione figli-padre nell'esempio supermarket per la generalizzazione totale prodotto/base/composto
  • (8-5)
    Esempio Le fusione figli-padre nell'esempio CdL per la generalizzazione parziale studente/studente trasferito
  • (8-6)
    Fusione padre-figli: metodo, vincoli, vantaggi, svantaggi
  • (8-7)
    Esempio Le fusione padre-figli nell'esempio CdL per la generalizzazione totale persona/studente/docente
  • (8-8)
    Esempio Le fusione padre-figli nell'esempio rivista per la generalizzazione totale contenuto/articolo/figura
  • (8-9)
    Introduzione di relazioni tra padre e figli: metodo, vincoli, vantaggi, svantaggi
  • (8-10)
    Esempio La (possibile, ma non ottimale) introduzione di relazioni nell'esempio rivista per la generalizzazione totale contenuto/articolo/figura
  • (8-11)
    Esempio L'introduzione di relazioni nell'esempio rivista per la generalizzazione totale autore/dipendente/freelance
  • (8-12)
    Esempio La soluzione mista nell'esempio rivista per l'eliminazione delle due generalizzazioni totali a cascata sorgente/autore/altro e autore/dipendente/freelance
  • (8-13)
    Esempio Il supermarket: ottimizzazione e ristrutturazione del modello ER
    materiale ER_Examples - Supermarket - Ristrutturato
  • (8-14)
    Esempio L'università: ottimizzazione e ristrutturazione del modello ER
    materiale ER_Examples - CdL
  • (8-15)
    Esempio L'azienda: ottimizzazione e ristrutturazione del modello ER
    materiale ER_Examples - Azienda
  • (8-16)
    Esempio La rivista: ottimizzazione e ristrutturazione del modello ER
    materiale ER_Examples - Rivista

Lezione 9: Esercitazione finale sulla progettazione concettuale e sulla ristrutturazione dei diagrammi ER

20/03/2026, ore 09:30 (2 ore)

  • (9-1)
    Esempio La banca: dalle specifiche al diagramma ER
    materiale ER_Examples - Banca
  • (9-2)
    Esempio La banca: ottimizzazione e ristrutturazione del modello ER
    materiale ER_Examples - Banca
  • (9-3)
    Cenni sul modello relazionale

Lezione 10: Progettazione logica

25/03/2026, ore 08:30 (3 ore)
Slides ER-Relazionale

  • (10-1)
    Cenni sul modello relazionale
  • (10-2)
    Trasformazione ER - Relazionale: entità
  • (10-3)
    Migrazione delle chiavi dal modello ER a quello relazionale
  • (10-4)
    Criteri per la scelta della chiave primaria a livello relazionale (DBMS)
  • (10-5)
    Introduzione di nuove chiavi primarie interne alle tabelle
  • (10-6)
    Trasformazione ER - Relazionale: relazioni
  • (10-7)
    Esempio Confronto tra informazione veicolata dalla struttura relazionale e rappresentata nel diagramma ER
  • (10-8)
    Chiavi per le tabelle di relazione
  • (10-9)
    Mantenere tutti i vincoli di cardinalità nel DBMS: prime idee
  • (10-10)
    Ottimizzazione delle relazioni
  • (10-11)
    Fusione di tabelle relazionali in base alla cardinalità della relazione rappresentata
  • (10-12)
    Esempio Confronto tra informazione veicolata dalla struttura relazionale ottimizzata e rappresentata nel diagramma ER
  • (10-13)
    Trasformazione ER - Relazionale: entità deboli
  • (10-14)
    Esempio L'università: dal modello concettuale ristrutturato a quello logico
    materiale ER_Examples - CdL

Lezione 11: Esercitazione finale sulla progettaziome logica

27/03/2026, ore 09:30 (2 ore)

  • (11-1)
    Esempio L'azienda: dal modello concettuale ristrutturato a quello logico
    materiale ER_Examples - Azienda
  • (11-2)
    Esempio Il supermarket: dal modello concettuale ristrutturato a quello logico
    materiale ER_Examples - Supermarket
  • (11-3)
    Esempio La rivista: dal modello concettuale ristrutturato a quello logico
    materiale ER_Examples - Rivista

Lezione 12: Esercitazione finale sulla progettazione concettuale e logica

01/04/2026, ore 08:30 (3 ore)

  • (12-1)
    Esempio La banca:: dal modello concettuale ristrutturato a quello logico
    materiale ER_Examples - Banca
  • (12-2)
    Esempio La biblioteca: dalle specifiche al diagramma ER
    materiale ER_Examples - Biblioteca
  • (12-3)
    Esempio Perchè è necessario modellare il concetto di copia della pubblicazione (invece di tenerne solo un contatore)?
  • (12-4)
    Esempio Vari modi di modellare il prestito... che collasseranno sulla stessa struttura relazionale
  • (12-5)
    Esempio La biblioteca: ottimizzazione e ristrutturazione del modello ER
    materiale ER_Examples - Biblioteca
  • (12-6)
    Esempio Eliminare la generalizzazione sulla pubblicazione: ottimizzazione degli attributi
  • (12-7)
    Esempio Vari modi di trasformare l'attributo multivalore parola_chiave: vantaggi e svantaggi
  • (12-8)
    Esempio La biblioteca: dal modello concettuale ristrutturato a quello logico
    materiale ER_Examples - Biblioteca
  • (12-9)
    Esempio Vari modi di rendere nel modello relazionale l'attributo (enumerativo) genere: vantaggi, svantaggi... e la soluzione più "furba"

Lezione 13: Introduzione a SQL

08/04/2026, ore 08:30 (3 ore)
Slides SQL

  • (13-1)
    Presentazione del DBMS MySQL
  • (13-2)
    Installazione di MySQL server
  • (13-3)
    Installazione e uso di MySQL Workbench
  • (13-4)
    MySQL: scelta dello storage engine
    link https://dev.mysql.com/doc/refman/8.4/en/storage-engines.html
  • (13-5)
    Presentazione di SQL
  • (13-6)
    DDL, DML e QL
  • (13-7)
    I tipi di dato built-in di SQL
  • (13-8)
    Tipi di dato SQL: numerici
  • (13-9)
    Tipi di dato SQL: binari
  • (13-10)
    Esempio Uso corretto dei tipi binari e corrispondenze con i linguaggi di programmazione
  • (13-11)
    Tipi di dato SQL: carattere
  • (13-12)
    Tipi di dato SQL: temporali
  • (13-13)
    Esempio Uso corretto dei tipi temporali e corrispondenze con i linguaggi di programmazione
  • (13-14)
    Tipi di dato SQL: booleani
  • (13-15)
    La logica a tre valori dell'SQL
  • (13-16)
    Tipi di dato SQL: il valore null
  • (13-17)
    Tipi di dato in MySQL: differenze ed estensioni
    link https://dev.mysql.com/doc/refman/8.4/en/data-types.html
  • (13-18)
    Creazione di domini in SQL
  • (13-19)
    La sintassi di base degli statement SQL
  • (13-20)
    La parola chiave DEFAULT nei domini
  • (13-21)
    Vincoli di tipo CHECK nei domini
  • (13-22)
    Modifica e rimozione di domini
  • (13-23)
    Operatori e funzioni comuni dell'SQL
  • (13-24)
    Funzioni scalari SQL
  • (13-25)
  • (13-26)
    Funzioni stringa SQL
  • (13-27)
    Esempio Funzioni stringa in MySQL
    link https://dev.mysql.com/doc/refman/8.4/en/string-functions.html
  • (13-28)
    I tre delimitatori usati in MySQL: virgolette ("), apici (') e backtick (`)
  • (13-29)
    Funzioni temporali SQL
  • (13-30)

Lezione 14: SQL: creazione di database e tabelle

10/04/2026, ore 09:30 (2 ore)
Slides SQL

  • (14-1)
    Esempio Operatori di confronto (My)SQL
    link https://dev.mysql.com/doc/refman/8.3/en/comparison-operators.html
  • (14-2)
    Operatori di confronto SQL: BETWEEN e IN
  • (14-3)
    Operatori di confronto SQL: LIKE
  • (14-4)
    Operatori di confronto SQL: IS NULL
  • (14-5)
    Gestione dell'utenza in un DBMS: utenti
  • (14-6)
    MySQL: utenti host-specific e sicurezza
  • (14-7)
    Esempio Uso dei comandi CREATE USER e DROP USER
  • (14-8)
    Esempio Il modo più comune per interfacciare un'applicazione con un DBMS
  • (14-9)
    Gestione dell'utenza in un DBMS: ruoli
  • (14-10)
    Creazione di un database
  • (14-11)
    Esempio Uso dei comandi CREATE DATABASE e DROP DATABASE
  • (14-12)
    Creazione di tabelle
  • (14-13)
    Esempio Uso base dei comandi CREATE TABLE e DROP TABLE
  • (14-14)
    Esempio Definizione di base delle colonne di una tabella: nomi e tipi
  • (14-15)
    MySQL: identificatori case sensitive in base alla piattaforma!
  • (14-16)
    Esempio Il create/alter table wizard di MySQL Workbench: alcuni trucchi per sfruttarlo e imparare
  • (14-17)
    Colonne calcolate: GENERATED ALWAYS AS

Lezione 15: SQL: i vincoli 1

15/04/2026, ore 08:30 (3 ore)
Slides SQL

  • (15-1)
    Vincoli su tabelle
  • (15-2)
    Assegnare un nome ai vincoli
  • (15-3)
    Introduzione alle transazioni
  • (15-4)
    Differibilità dei vincoli
  • (15-5)
    Specifica di chiavi: PRIMARY KEY e UNIQUE
  • (15-6)
    Indici creati nel database dai vincoli PRIMARY KEY e UNIQUE
  • (15-7)
    Tecniche speciali per la generazione di chiavi primarie
  • (15-8)
    MySQL: caratteristiche delle colonne auto_increment
    link https://dev.mysql.com/doc/refman/8.0/en/example-auto-increment.html
  • (15-9)
    Vincoli NOT NULL sulle colonne
  • (15-10)
    La parola chiave DEFAULT sulle colonne
  • (15-11)
    Esempio Le combinazioni di DEFAULT e NOT NULL e il loro significato
  • (15-12)
    Chiavi esterne e vincoli di integrità referenziale: FOREIGN KEY ... REFERENCES
  • (15-13)
    Esempio Relazioni ER, riferimenti relazionali e FOREIGN KEY SQL
  • (15-14)
    Vincoli sui dati (e anche sui metadati) indotti dalle FOREIGN KEY
  • (15-15)
    Indici necessari e opzionali per realizzare una FOREIGN KEY
  • (15-16)
    Esempio Perchè una FOREIGN KEY richiede (in MySQL) due indici?

Lezione 16: SQL: i vincoli 2

17/04/2026, ore 09:30 (2 ore)
Slides SQL

  • (16-1)
    Presentazione dei progetti d'esame
  • (16-2)
    Vincoli di integrità referenziale: il costrutto MATCH
  • (16-3)
    Esempio I vari tipi di MATCH applicati a una FOREIGN KEY multi colonna
  • (16-4)
    Esempio Chiavi esterne e modifiche alle tabelle riferite: come preservare l'integrità referenziale?
  • (16-5)
    Vincoli di integrità referenziale: azioni ON DELETE e ON UPDATE
  • (16-6)
    Esempio Le combinazioni di azioni più frequenti (e più sensate) per ON DELETE e ON UPDATE
  • (16-7)
    Esempio Creazione dei vincoli in SQL: considerazioni sulle azioni ON UPDATE e ON DELETE
  • (16-8)
    Vincoli CHECK sulle tabelle
  • (16-9)
    Vincoli CHECK in MySQL 8
  • (16-10)
    Modifica e rimozione di vincoli

Lezione 17: Esercitazione finale sulla progettazione di un database

22/04/2026, ore 08:30 (3 ore)

  • (17-1)
    Esempio La Banca: implementazione fisica con SQL
    materiale SQL_Examples - Banca
  • (17-2)
    Esempio Scrivere uno script per la (ri)generazione di un intero database
  • (17-3)
    Esempio Il Campionato: specifiche
  • (17-4)
    Esempio Il Campionato: progettazione concettuale
    materiale ER_Examples - Campionato
  • (17-5)
    Esempio Il Campionato: ristrutturazione ER
  • (17-6)
    Esempio Il Campionato: traduzione nel modello relazionale

Lezione 18: SQL: Inserimento, modifica, cancellazione di dati

24/04/2026, ore 09:30 (2 ore)
Slides SQL
Materiale SQL_Examples - Campionati

  • (18-1)
    Esempio Il Campionato: implementazione fisica con SQL
    materiale SQL_Examples - Campionati
  • (18-2)
    Inserimento di tuple in una tabella: INSERT INTO ... VALUES
  • (18-3)
    Specificare le colonne nell'inserimento e omettere i valori calcolati o con default
  • (18-4)
    Esempio Violazione di vincoli e relativi messaggi di errore di MySQL
  • (18-5)
    Esempio Visualizzare rapidamente il contenuto di una tabella nel Workbench
  • (18-6)
    Esempio Inserire rapidamente un record col Workbench
  • (18-7)
    Creazione di tabelle calcolate: INSERT INTO ... SELECT
  • (18-8)
    Inserimento di record multipli con MySQL
  • (18-9)
    Modifica dei record di una tabella: UPDATE ... SET ... WHERE
  • (18-10)
    Caratteristiche e limiti delle espressioni di aggiornamento
  • (18-11)
    Aggiornamenti con join in MySQL
  • (18-12)
    Sintassi elementare per le clausole WHERE
  • (18-13)
    Esempio Modificare rapidamente un record col Workbench
  • (18-14)
    Eliminazione dei record di una tabella DELETE FROM ... WHERE
  • (18-15)
    Svuotare una tabella con una DELETE senza WHERE
  • (18-16)
    Esempio Cancellare rapidamente un record col Workbench

Lezione 19: SQL: query di base

29/04/2026, ore 08:30 (3 ore)
Slides SQL
Materiale SQL_Examples - Campionati

  • (19-1)
    I tre possibili risultati di una query: tabella, lista e valore
  • (19-2)
    Interrogazioni di base: SELECT ... FROM ... WHERE
  • (19-3)
    La clausola FROM
  • (19-4)
    Alias per i nomi di tabella
  • (19-5)
    Esempio Perchè usare gli alias di tabella?
  • (19-6)
    La clausola WHERE
  • (19-7)
    La clausola SELECT
  • (19-8)
    Colonne calcolate
  • (19-9)
    Alias per i nomi di colonna
  • (19-10)
    Esempio Perchè usare gli alias di colonna?
  • (19-11)
    Eliminazione dei duplicati: DISTINCT
  • (19-12)
    Ordinamento dei risultati di una query: la clausola ORDER BY
  • (19-13)
    Esempio Ordinamento su colonne calcolate o non estratte dalla query
  • (19-14)
    Limitazione dell'output: la clausola (non standard) LIMIT
  • (19-15)
    Esempio Paginazione (efficiente) dei risultati con la clausola LIMIT
  • (19-16)
    Sotto-query semplici
  • (19-17)
    Esempio Sotto-query scalari usate nelle clausole WHERE e SELECT
  • (19-18)
    Come assicurarsi che una sotto-query sia sempre scalare?
  • (19-19)
    Sotto-query correlate e visibilità degli identificatori
  • (19-20)
    Esempio Sotto-query lista usate con l'operatore IN
  • (19-21)
    Esempio Sotto-query usate con un operatori di confronto

Lezione 20: SQL: I join

30/04/2026, ore 08:30 (2 ore)
Slides SQL
Materiale SQL_Examples - Campionati

  • (20-1)
    Uso dei quantificatori ANY e ALL con query lista
  • (20-2)
    Join tra tabelle
  • (20-3)
    Join impliciti: condizioni di join e clausola WHERE
  • (20-4)
    Esempio Condizioni di join semplici e multiple
  • (20-5)
    Esempio Mescolare condizioni di filtro e di join nella clausola WHERE
  • (20-6)
    Join espliciti con l'operatore JOIN
  • (20-7)
    Join interni: l'operatore INNER JOIN e le sue varianti
  • (20-8)
    Esempio Spostare le condizioni di WHERE nel JOIN
  • (20-9)
    Esempio Scrivere JOIN multipli concatenati
  • (20-10)
    Problemi con i join effettuati con le condizioni WHERE: includere nei risultati record non relazionati
  • (20-11)
    Join esterni: l'operatore OUTER JOIN e le sue varianti
  • (20-12)
    Esempio Scrivere JOIN tra sotto-JOIN (con parentesi di raggruppamento)

Lezione 21: SQL: aggregazione di record

06/05/2026, ore 08:30 (3 ore)
Slides SQL
Materiale SQL_Examples - Campionati

  • (21-1)
    Aggregazione di record
  • (21-2)
    Gli operatori aggregati: COUNT, SUM, AVG, MIN, MAX
  • (21-3)
    Modificatori ALL e DISTINCT per gli operatori aggregati
  • (21-4)
    Esempio Le molte modalità dell'operatore COUNT: COUNT(*), COUNT(e), COUNT(DISTINCT e)
  • (21-5)
    Trattamento dei valori NULL con gli operatori aggregati
  • (21-6)
    Limitazioni della clausola SELECT con gli operatori aggregati
  • (21-7)
    Esempio Il partizionamento: quando l'aggregazione globale non è sufficiente
  • (21-8)
    Partizionamento di record: la clausola GROUP BY
  • (21-9)
    Uso degli operatori aggregati con la clausola GROUP BY
  • (21-10)
    Limitazioni della clausola SELECT in presenza della clausola GROUP BY
  • (21-11)
    Raggruppamento su più colonne
  • (21-12)
    Esempio Usare espressioni complesse come criterio di join
  • (21-13)
    Condizioni sui gruppi di record: la clausola HAVING
  • (21-14)
    Esempio Perchè c'è bisogno di una clausola nuova per delle condizioni di filtro? La differenza tra WHERE e HAVING
  • (21-15)
    Uso del predicato EXISTS con sotto-query generiche
  • (21-16)
    Esempio Realizzare una query differenza senza l'operatore MINUS: un uso particolare di NOT EXISTS
  • (21-17)
    Combinazione di query tramite operatori insiemistici: UNION, INTERSECT, MINUS
  • (21-18)
    Esempio Sotto-query correlate e scorrelate: considerazioni di efficienza
  • (21-19)
    Esempio Soluzioni alternative alle sotto-query: usare i join in maniera creativa

Lezione 22: SQL avanzato: viste, procedure e funzioni

08/05/2026, ore 09:30 (2 ore)
Slides SQL
Materiale SQL_Examples - Campionati

  • (22-1)
    Le viste
  • (22-2)
    Creazione di viste: CREATE VIEW
  • (22-3)
    Esempio Uso delle viste nelle query (per modularizzare e semplificare)
  • (22-4)
    Esempio Uso delle viste per limitare l'accesso ai dati
  • (22-5)
    Esempio Usare l'istruzione CREATE TABLE AS per la creazione di snapshot sui dati
  • (22-6)
    Le Stored Procedures e Functions
  • (22-7)
    Le Stored Procedures e Functions in MySQL
  • (22-8)
    Il terminatore di istruzioni nelle procedure
  • (22-9)
    Creazione di una procedura: CREATE PROCEDURE
  • (22-10)
    Codice per le procedure: blocchi BEGIN...END
  • (22-11)
    Uso di statement SQL nelle procedure
  • (22-12)
    Esempio Vari usi del costrutto SELECT in una procedura: per query scalari, colonna, riga e generiche
  • (22-13)
    Invocazione di procedure: CALL
  • (22-14)
    Esempio Procedure come query parametriche
  • (22-15)
    Parametri di input nelle procedure
  • (22-16)
    Esempio Creazione di tabelle temporanee (nelle procedure)
  • (22-17)
    Costrutti di flusso per le procedure: IF...THEN...ELSE
  • (22-18)
    Parametri di output nelle procedure
  • (22-19)
    Esempio Invocare una procedura con parametri OUT e impostarne correttamente il valore
  • (22-20)
    Impostare il valore di una variabile con SET
  • (22-21)
    Esempio Creare variabili globali (di sessione) nell'interprete SQL: la sintassi @variabile
  • (22-22)
    La clausola INTO del costrutto SELECT
  • (22-23)
    Dichiarare variabili locali in una procedura con DECLARE
  • (22-24)
    Creazione di una funzione: CREATE FUNCTION
  • (22-25)
    Parametri e tipo di ritorno (RETURNS) nelle funzioni
  • (22-26)
    Restituire un valore da una funzione con RETURN
  • (22-27)
    Esempio Uso di funzioni user-defined nelle query

Lezione 23: SQL avanzato: cursori, trigger, transazioni

13/05/2026, ore 08:30 (3 ore)
Slides SQL
Materiale SQL_Examples - Campionati

  • (23-1)
    Esempio Creare procedure e funzioni complesse per incorporare la logica di accesso e manipolazione del database
  • (23-2)
    Costrutti di flusso per le procedure: IF...THEN...ELSE, CASE...WHEN, WHILE, LOOP, REPEAT...UNTIL
  • (23-3)
    Cenni sulle conditions in SQL
  • (23-4)
    Cenni sugli stati SQL (SQLSTATE)
  • (23-5)
    Segnalare una condizione anomala in una procedura: SIGNAL
  • (23-6)
    Esempio Creare procedure e funzioni complesse per incorporare la logica di controllo e manipolazione del database, parte 1
  • (23-7)
    La funzione last_insert_id()
  • (23-8)
    La funzione found_rows()
  • (23-9)
    Le conditions SQL e gli handler
  • (23-10)
    Dichiarazione di handler: DECLARE HANDLER
  • (23-11)
    Similitudini e differenze tra gli handler SQL e i blocchi try di JAVA
  • (23-12)
    EXIT e CONTINUE handlers
  • (23-13)
    Gestire una condizione anomala e risegnalarla: RESIGNAL
  • (23-14)
    Muoversi tra i record restituiti da una query: i cursori
  • (23-15)
    Gestione del ciclo di vita di un cursore: DACLARE CURSOR, OPEN, FETCH, CLOSE
  • (23-16)
    Gestire la condizione di fine record (NOT FOUND) con un handler
  • (23-17)
    Esempio Creare procedure e funzioni complesse per incorporare la logica di controllo e manipolazione del database, parte 2
  • (23-18)
    I Trigger
  • (23-19)
    Creazione di un trigger: CREATE TRIGGER
  • (23-20)
    Eventi gestibili da un trigger: INSERT, UPDATE, DELETE
  • (23-21)
    Tempo di esecuzione dei trigger: AFTER e BEFORE
  • (23-22)
    Trigger multipli e ordine di esecuzione (FOLLOWS e PRECEDES)
  • (23-23)
    Usi comuni dei trigger: controllo, completamento, calcolo
  • (23-24)
    I record NEW e OLD nel codice dei trigger (in base all'evento gestito)
  • (23-25)
    Esempio Esempi di trigger di controllo e calcolo per il database dei campionati
  • (23-26)
    Le Transazioni
  • (23-27)
    Gestire le transazioni: START TRANSACTION, COMMIT, ROLLBACK
  • (23-28)
    Autocommit delle transazioni
  • (23-29)
    Gestione delle transazioni in MySQL
    link https://dev.mysql.com/doc/refman/8.0/en/commit.html

Lezione 24: Basi di dati e linguaggi di programmazione

15/05/2026, ore 09:30 (2 ore)
Slides SQL
Materiale Java_JDBC_Example_MySQL

  • (24-1)
    Interfacciamento dei DBMS con i linguaggi di programmazione
  • (24-2)
    JAVA e i DBMS
  • (24-4)
    Specifica e caricamento di un driver DBMS con il JDBC
  • (24-5)
    Le connection string JDBC
  • (24-6)
    Esempio Connessione a una base di dati con il JDBC tramite il DriverManager
  • (24-7)
    Esempio Liberare le risorse JDBC: chiusura corretta degli oggetti
  • (24-8)
    Esempio Creare uno Statement JDBC
  • (24-9)
    Esempio Interrogare la base di dati con uno Statement JDBC (executeQuery)
  • (24-10)
    Esempio Gestione dei risultati di una query tramite i ResultSet JDBC
  • (24-11)
    Esempio Inserire/Aggiornare record tramite una Statement JDBC (executeUpdate)
  • (24-12)
    Query parametriche: i problemi degli statement costruiti con concatenazioni di stringa
  • (24-13)
    Precompilazione di statement: i PreparedStatement
  • (24-14)
    Esempio Definire e impostare i parametri di un PreparedStatement
  • (24-15)
    Esempio Eseguire un PreparedStatement
  • (24-16)
    Chiamare una stored procedure da Java: i CallableStatement
  • (24-17)
    Esempio Predisporre un CallableStatement con parametri IN
  • (24-18)
    Esempio Eseguire un CallableStatement
  • (24-19)
    Esempio Leggere la tabella generata da una stored procedure
  • (24-20)
    Esempio Registrare dei parametri OUT per un CallableStatement e leggerne il valore dopo l'esecuzione
  • (24-21)
    Esempio Eseguire una chiamata a funzione tramite un CallableStatement
  • (24-22)
    Esempio Gestire le transazioni in Java: disabilitare l'autocommit
  • (24-23)
    Esempio Gestire le transazioni in Java: i metodi commit e rollback della Connection
  • (24-24)
    Esempio Riassunto delle modalità d'uso del JDBC (con MySQL)
    materiale Java_JDBC_Example_MySQL
  • (24-25)
    Incorporare il DBMS SQLite in un'applicazione Java
    link https://github.com/xerial/sqlite-jdbc
  • (24-26)
    Esempio Riassunto delle modalità d'uso del JDBC (con SQLite)
    materiale Java_JDBC_Example_SQLite
  • (24-27)
    Cenni sulla sicurezza: la SQL injection e come difendersi