Lectures Log - A.Y. 2024/2025

Lecture 1: Introduction

2025-02-26, 08:30 (3 hours)

  • (1-1)
    Presentazione del corso
  • (1-2)
    Perché le basi di dati sono importanti?
  • (1-3)
    Example 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)
    Example I DBMS serverless come SQLite
  • (1-6)
    Perché usiamo (ancora) il modello relazionale?
  • (1-7)
    E le basi di dati NoSQL?
  • (1-8)
    Example L'affermazione delle basi di dati document-oriented come MongoDB
  • (1-9)
    Example L'affermazione delle basi di dati a grafo nelle applicazioni di data analytics
  • (1-10)
    SQL e NoSQL sono veramente mondi isolati?
  • (1-11)
    Example Le estensioni NoSQL dei database relazionali (e viceversa)
  • (1-12)
    Gli errori più comuni nelle basi di dati e le loro (catastrofiche) conseguenze
  • (1-13)
    Il processo di realizzazione di una base di dati
  • (1-14)
    Le fasi della progettazione: concettuale, logica, fisica
  • (1-15)
    Gli strumenti per ciascuna fase di progettazione
  • (1-16)
    Analisi delle specifiche
  • (1-17)
    Example L'Università: analisi dei requisiti

Lecture 2: ER Modelling 1

2025-02-28, 09:30 (2 hours)
Slides ER

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

Lecture 3: ER Modelling 2

2025-03-05, 08:30 (3 hours)
Slides ER

  • (3-1)
    Example L'Azienda: entità, attributi e chiavi
  • (3-2)
    Documentazione dei diagrammi ER: i tipi di dato
  • (3-3)
    Generalizzazione di entità
  • (3-4)
    Generalizzazioni totali e parziali
  • (3-5)
    Generalizzazioni e chiavi
  • (3-6)
    Example Il supermercato: entità (e generalizzazioni), attributi e chiavi
  • (3-7)
    Relazioni
  • (3-8)
    Relazioni non binarie
  • (3-9)
    Auto-Relazioni
  • (3-10)
    Ruoli nelle relazioni
  • (3-11)
    Example Il supermercato: relazioni
  • (3-12)
    Relazioni e generalizzazioni
  • (3-13)
    Attributi sulle relazioni
  • (3-14)
    Example Il supermercato: attributi sulle relazioni

Lecture 4: ER Modelling 3

2025-03-06, 08:30 (2 hours)
Slides ER

  • (4-1)
    Example L'azienda: relazioni
  • (4-2)
    Example L'azienda: attributi sulle relazioni
  • (4-3)
    Example Modellare il concetto di "storico" per un'associazione: soluzioni e considerazioni
  • (4-4)
    Cardinalità delle relazioni
  • (4-5)
    Example L'azienda: relazioni con cardinalità
    material ER_Examples - Azienda

Lecture 5: ER Modelling - final examples

2025-03-07, 09:30 (2 hours)
Slides ER

  • (5-1)
    Example Il supermercato: relazioni con cardinalità
    material ER_Examples - Supermarket
  • (5-2)
    Example L'Università: relazioni
    material ER_Examples - CdL
  • (5-3)
    Entità deboli e chiavi con relazioni
  • (5-4)
    Cardinalità ammesse per le relazioni con entità deboli
  • (5-5)
    Example L'Università: chiavi per le entità deboli
  • (5-6)
    Example L'Auto-Relazione mutuazione tra gli insegnamenti
  • (5-7)
    Example La rivista
  • (5-8)
    La rivista: attributi derivabili
  • (5-9)
    Example La rivista: considerazioni sullo storage di binari nei DBMS

Lecture 6: ER Optimization and Reorganization 1

2025-03-12, 08:30 (3 hours)
Slides ER-Relazionale

  • (6-1)
    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-2)
    Example La rivista: quando una generalizzazione esprime molti più vincoli di una (o due) relazioni
  • (6-3)
    Example La rivista: vari modi di modellare il sotto-diagramma uscita/pagina/riquadro/contenuto/articolo/figura
  • (6-4)
    Example La rivista: vari modi di modellare il dominio degli autori
  • (6-5)
    Example La rivista: diagramma ER finale
    material ER_Examples - Rivista
  • (6-6)
    Ristrutturazione dei diagrammi ER
  • (6-7)
    Parametri di ottimizzazione: determinare lo schema di accesso ai dati dalle funzionalità previste
  • (6-8)
    Ristrutturazione: Eliminazione attributi composti
  • (6-9)
    Ristrutturazione: Eliminazione attributi con cardinalità
  • (6-10)
    Example Vari modi per ottimizzare l'eliminazione di un attributo con cardinalità
  • (6-11)
    Example L'università: l'attributo sillabo... quando è meglio non decomporre troppo ed essere un po' NoSQL
  • (6-12)
    Ristrutturazione: Attributi derivabili
  • (6-13)
    Criteri per l'introduzione o l'eliminazione di un attributo derivabile

Lecture 7: ER Optimization and Reorganization 2

2025-03-19, 08:30 (3 hours)
Slides ER-Relazionale

  • (7-1)
    Ottimizzare le strutture ER con la ristrutturazione
  • (7-2)
    Ristrutturazione: fusioni e decomposizioni
  • (7-3)
    Decomposizione di entità
  • (7-4)
    Example L'università: decomposizione dell'entità insegnamento
  • (7-5)
    Decomposizione di relazioni
  • (7-6)
    Example L'azienda: decomposizione della relazione lavora per lo storico degli impieghi
  • (7-7)
    Ristrutturazione: Eliminazione delle gerarchie
  • (7-8)
    Criteri e metodi per l'eliminazione di una gerarchia
  • (7-9)
    Fusione figli-padre: metodo, vincoli, vantaggi, svantaggi
  • (7-10)
    Example Le fusione figli-padre nell'esempio supermarket per la generalizzazione totale prodotto/base/composto
  • (7-11)
    Example Le fusione figli-padre nell'esempio CdL per la generalizzazione parziale studente/studente trasferito
  • (7-12)
    Fusione padre-figli: metodo, vincoli, vantaggi, svantaggi
  • (7-13)
    Example Le fusione padre-figli nell'esempio CdL per la generalizzazione totale persona/studente/docente
  • (7-14)
    Example Le fusione padre-figli nell'esempio rivista per la generalizzazione totale contenuto/articolo/figura
  • (7-15)
    Introduzione di relazioni: metodo, vincoli, vantaggi, svantaggi
  • (7-16)
    Example La (possibile, ma non ottimale) introduzione di relazioni nell'esempio rivista per la generalizzazione totale contenuto/articolo/figura
  • (7-17)
    Example L'introduzione di relazioni nell'esempio rivista per la generalizzazione totale autore/dipendente/freelance
  • (7-18)
    Example Il supermarket: ottimizzazione e ristrutturazione del modello ER
    material ER_Examples - Supermarket - Ristrutturato

Lecture 8: Logic Modelling 1

2025-03-21, 09:30 (2 hours)
Slides ER-Relazionale

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

Lecture 9: Conceptual and Logic Modelling - final examples 1

2025-03-26, 08:30 (3 hours)

  • (9-1)
    Example L'università: ottimizzazione e ristrutturazione del modello ER
    material ER_Examples - CdL
  • (9-2)
    Example L'università: dal modello concettuale ristrutturato a quello logico
    material ER_Examples - CdL
  • (9-3)
    Example L'azienda: ottimizzazione e ristrutturazione del modello ER
    material ER_Examples - Azienda
  • (9-4)
    Example L'azienda: dal modello concettuale ristrutturato a quello logico
    material ER_Examples - Azienda
  • (9-5)
    Example Il supermarket:ottimizzazione e ristrutturazione del modello ER
    material ER_Examples - Supermarket
  • (9-6)
    Example Il supermarket: dal modello concettuale ristrutturato a quello logico
    material ER_Examples - Supermarket
  • (9-7)
    Example La rivista: ottimizzazione e ristrutturazione del modello ER
    material ER_Examples - Rivista
  • (9-8)
    Example La rivista: dal modello concettuale ristrutturato a quello logico
    material ER_Examples - Rivista

Lecture 10: Conceptual and Logic Modelling - final examples 2

2025-03-28, 09:30 (2 hours)

  • (10-1)
    Example La biblioteca: dalle specifiche al diagramma ER
    material ER_Examples - Biblioteca
  • (10-2)
    Example Perchè è necessario modellare il concetto di copia della pubblicazione (invece di tenerne solo un contatore)?
  • (10-3)
    Example Vari modi di modellare il prestito... che collasseranno sulla stessa struttura relazionale
  • (10-4)
    Example La biblioteca: ottimizzazione e ristrutturazione del modello ER
    material ER_Examples - Biblioteca
  • (10-5)
    Example Eliminare la generalizzazione sulla pubblicazione: ottimizzazione degli attributi
  • (10-6)
    Example Vari modi di trasformare l'attributo multivalore parola_chiave: vantaggi e svantaggi
  • (10-7)
    Example La biblioteca: dal modello concettuale ristrutturato a quello logico
    material ER_Examples - Biblioteca
  • (10-8)
    Example Vari modi di rendere nel modello relazionale l'attributo (enumerativo) genere: vantaggi, svantaggi... e la soluzione più "furba"
  • (10-9)
    Example Il servizio di streaming: specifiche
  • (10-10)
    Example Similitudini e differenze: come riutilizzare strutture concettuali e ottimizzazioni logiche in modelli diversi

Lecture 11: Introduction to SQL

2025-04-02, 08:30 (3 hours)
Slides SQL

  • (11-1)
    Example Il servizio di streaming: dalle specifiche al diagramma ER
    material ER_Examples - Streaming
  • (11-2)
    Example Modellare correttamente il ruolo di un partecipante nel servizio streaming
  • (11-3)
    Example Il servizio di streaming: dal modello concettuale a quello logico
    material ER_Examples - Streaming
  • (11-4)
    Presentazione del DBMS MySQL
  • (11-5)
    Installazione di MySQL server
  • (11-6)
    Installazione e uso di MySQL Workbench
  • (11-7)
    MySQL: scelta dello storage engine
    link https://dev.mysql.com/doc/refman/8.3/en/storage-engines.html
  • (11-8)
    Presentazione di SQL
  • (11-9)
    DDL, DML e QL
  • (11-10)
    I tipi di dato built-in di SQL
  • (11-11)
    Tipi di dato SQL: numerici
  • (11-12)
    Tipi di dato SQL: binari
  • (11-13)
    Example Uso corretto dei tipi binari e corrispondenze con i linguaggi di programmazione
  • (11-14)
    Tipi di dato SQL: carattere
  • (11-15)
    Tipi di dato SQL: temporali
  • (11-16)
    Example Uso corretto dei tipi temporali e corrispondenze con i linguaggi di programmazione
  • (11-17)
    Tipi di dato SQL: booleani
  • (11-18)
    La logica a tre valori dell'SQL
  • (11-19)
    Tipi di dato SQL: il valore null
  • (11-20)
    Tipi di dato in MySQL: differenze ed estensioni
    link https://dev.mysql.com/doc/refman/8.3/en/data-types.html
  • (11-21)
    Creazione di domini in SQL
  • (11-22)
    La sintassi di base degli statement SQL
  • (11-23)
    La parola chiave DEFAULT nei domini
  • (11-24)
    Vincoli di tipo CHECK nei domini
  • (11-25)
    Modifica e rimozione di domini
  • (11-26)
    Operatori e funzioni comuni dell'SQL
  • (11-27)
    Funzioni scalari SQL
  • (11-28)
  • (11-29)
    Funzioni stringa SQL
  • (11-30)
    Example Funzioni stringa in MySQL
    link https://dev.mysql.com/doc/refman/8.3/en/string-functions.html
  • (11-31)
    I tre delimitatori usati in MySQL: virgolette ("), apici (') e backtick (`)
  • (11-32)
    Funzioni temporali SQL
  • (11-33)
  • (11-34)
    Example Operatori di confronto (My)SQL
    link https://dev.mysql.com/doc/refman/8.3/en/comparison-operators.html
  • (11-35)
    Operatori di confronto SQL: BETWEEN e IN

Lecture 12: SQL: database and table creation

2025-04-04, 09:30 (2 hours)
Slides SQL

  • (12-1)
    Operatori di confronto SQL: LIKE
  • (12-2)
    Operatori di confronto SQL: IS NULL
  • (12-3)
    Gestione dell'utenza in un DBMS
  • (12-4)
    MySQL: utenti host-specific e sicurezza
  • (12-5)
    Example Uso dei comandi CREATE USER e DROP USER
  • (12-6)
    Example Il modo più comune per interfacciare un'applicazione con un DBMS
  • (12-7)
    Creazione di un database
  • (12-8)
    Example Uso dei comandi CREATE DATABASE e DROP DATABASE
  • (12-9)
    Creazione di tabelle
  • (12-10)
    Example Uso base dei comandi CREATE TABLE e DROP TABLE
  • (12-11)
    MySQL: identificatori case sensitive in base alla piattaforma!
  • (12-12)
    Example Il create/alter table wizard di MySQL Workbench: alcuni trucchi per sfruttarlo e imparare
  • (12-13)
    Gestione dei permessi in un DBMS
  • (12-14)
    Example Uso dei comandi GRANT e REVOKE
  • (12-15)
    Example Lo user manager di MySQL Workbench: caratteristiche e limiti

Lecture 13: SQL: constraints 1

2025-04-09, 08:30 (3 hours)
Slides SQL

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

Lecture 14: SQL: constraints 2

2025-04-11, 09:30 (2 hours)
Slides SQL

  • (14-1)
    Vincoli di integrità referenziale: il costrutto MATCH
  • (14-2)
    Example Chiavi esterne e modifiche ai dati: come preservare l'integrità referenziale?
  • (14-3)
    Vincoli di integrità referenziale: azioni ON DELETE e ON UPDATE
  • (14-4)
    Example Le combinazioni di azioni più frequenti (e più sensate) per ON DELETE e ON UPDATE
  • (14-5)
    Example Creazione dei vincoli in SQL: considerazioni sulle azioni ON UPDATE e ON DELETE
  • (14-6)
    Vincoli CHECK sulle tabelle
  • (14-7)
    Vincoli CHECK in MySQL 8
  • (14-8)
    Modifica e rimozione di vincoli
  • (14-9)
    Example La Rivista: implementazione fisica con SQL
    material SQL_Examples - Rivista
  • (14-10)
    Example Scrivere uno script per la (ri)generazione di un intero database

Lecture 15: Final exercises on database design

2025-04-16, 08:30 (3 hours)

  • (15-1)
    Example Il Campionato: specifiche
  • (15-2)
    Example Il Campionato: progettazione concettuale
  • (15-3)
    Example Il Campionato: ristrutturazione ER
  • (15-4)
    Example Il Campionato: traduzione nel modello relazionale
  • (15-5)
    Example Il Campionato: implementazione fisica con SQL
    material SQL_Examples - Campionati

Lecture 16: SQL: base queries

2025-04-30, 08:30 (3 hours)
Slides SQL
Material SQL_Examples - Campionati

  • (16-1)
    Inserimento di tuple in una tabella: INSERT INTO ... VALUES
  • (16-2)
    Specificare le colonne nell'inserimento e omettere i valori calcolati o con default
  • (16-3)
    Example Violazione di vincoli e relativi messaggi di errore di MySQL
  • (16-4)
    Example Visualizzare rapidamente il contenuto di una tabella nel Workbench
  • (16-5)
    Example Inserire rapidamente un record col Workbench
  • (16-6)
    Creazione di tabelle calcolate: INSERT INTO ... SELECT
  • (16-7)
    Inserimento di record multipli con MySQL
  • (16-8)
    Modifica dei record di una tabella: UPDATE ... SET ... WHERE
  • (16-9)
    Caratteristiche e limiti delle espressioni di aggiornamento
  • (16-10)
    Aggiornamenti con join in MySQL
  • (16-11)
    Sintassi elementare per le clausole WHERE
  • (16-12)
    Example Modificare rapidamente un record col Workbench
  • (16-13)
    Eliminazione dei record di una tabella DELETE FROM ... WHERE
  • (16-14)
    Svuotare una tabella con una DELETE senza WHERE
  • (16-15)
    Example Cancellare rapidamente un record col Workbench
  • (16-16)
    I tre possibili risultati di una query: tabella, lista e valore
  • (16-17)
    Interrogazioni di base: SELECT ... FROM ... WHERE
  • (16-18)
    La clausola FROM
  • (16-19)
    Alias per i nomi di tabella
  • (16-20)
    Example Perchè usare gli alias di tabella?
  • (16-21)
    La clausola WHERE
  • (16-22)
    La clausola SELECT
  • (16-23)
    Colonne calcolate
  • (16-24)
    Alias per i nomi di colonna
  • (16-25)
    Example Perchè usare gli alias di colonna?
  • (16-26)
    Eliminazione dei duplicati: DISTINCT
  • (16-27)
    Ordinamento dei risultati di una query: la clausola ORDER BY
  • (16-28)
    Example Ordinamento su colonne calcolate o non estratte dalla query
  • (16-29)
    Limitazione dell'output: la clausola (non standard) LIMIT
  • (16-30)
    Example Paginazione (efficiente) dei risultati con la clausola LIMIT
  • (16-31)
    Sotto-query semplici
  • (16-32)
    Example Sotto-query scalari usate nelle clausole WHERE e SELECT
  • (16-33)
    Come assicurarsi che una sotto-query sia sempre scalare?

Lecture 17: SQL: subqueries and joins

2025-05-07, 08:30 (3 hours)
Slides SQL
Material SQL_Examples - Campionati

  • (17-1)
    Sotto-query correlate e visibilità degli identificatori
  • (17-2)
    Example Sotto-query lista usate con l'operatore IN
  • (17-3)
    Example Sotto-query usate con un operatori di confronto
  • (17-4)
    Uso dei quantificatori ANY e ALL con query lista
  • (17-5)
    Join tra tabelle
  • (17-6)
    Join impliciti: condizioni di join e clausola WHERE
  • (17-7)
    Example Condizioni di join semplici e multiple
  • (17-8)
    Example Mescolare condizioni di filtro e di join nella clausola WHERE
  • (17-9)
    Join espliciti con l'operatore JOIN
  • (17-10)
    Join interni: l'operatore INNER JOIN e le sue varianti
  • (17-11)
    Example Spostare le condizioni di WHERE nel JOIN
  • (17-12)
    Example Scrivere JOIN multipli concatenati
  • (17-13)
    Problemi con i join effettuati con le condizioni WHERE: includere nei risultati record non relazionati
  • (17-14)
    Join esterni: l'operatore OUTER JOIN e le sue varianti
  • (17-15)
    Example Scrivere JOIN tra sotto-JOIN (con parentesi di raggruppamento)

Lecture 18: SQL: record aggregation

2025-05-09, 09:30 (2 hours)
Slides SQL
Material SQL_Examples - Campionati

  • (18-1)
    Aggregazione di record
  • (18-2)
    Gli operatori aggregati: COUNT, SUM, AVG, MIN, MAX
  • (18-3)
    Modificatori ALL e DISTINCT per gli operatori aggregati
  • (18-4)
    Example Le molte modalità dell'operatore COUNT: COUNT(*), COUNT(e), COUNT(DISTINCT e)
  • (18-5)
    Trattamento dei valori NULL con gli operatori aggregati
  • (18-6)
    Limitazioni della clausola SELECT con gli operatori aggregati
  • (18-7)
    Example Il partizionamento: quando l'aggregazione globale non è sufficiente
  • (18-8)
    Partizionamento di record: la clausola GROUP BY
  • (18-9)
    Uso degli operatori aggregati con la clausola GROUP BY
  • (18-10)
    Limitazioni della clausola SELECT in presenza della clausola GROUP BY
  • (18-11)
    Raggruppamento su più colonne
  • (18-12)
    Example Ordinamento dei risultati nelle query con raggruppamento
  • (18-13)
    Example Usare espressioni complesse come criterio di join
  • (18-14)
    Condizioni sui gruppi di record: la clausola HAVING
  • (18-15)
    Example Perchè c'è bisogno di una clausola nuova per delle condizioni di filtro? La differenza tra WHERE e HAVING

Lecture 19: SQL queries - advanced examples

2025-05-14, 08:30 (3 hours)
Slides SQL
Material SQL_Examples - Campionati

  • (19-1)
    Richiami sulle sotto-query scalari
  • (19-2)
    Richiami sulle sotto-query lista (o colonna)
  • (19-3)
    Sotto-query riga
  • (19-4)
    Uso del predicato EXISTS con sotto-query generiche
  • (19-5)
    Example Realizzare una query differenza senza l'operatore MINUS: un uso particolare di NOT EXISTS
  • (19-6)
    Example Esercitazione finale sulle query: interrogazioni sul campionato di calcio
  • (19-7)
    Example Creare query complesse usando raggruppamenti e sotto-query
  • (19-8)
    Example Le common table expressions (CTE) come alternativa alle sotto-query nidificate

Lecture 20: Advanced SQL: procedures

2025-05-16, 09:30 (2 hours)
Slides SQL
Material SQL_Examples - Campionati

  • (20-1)
    Combinazione di query tramite operatori insiemistici: UNION, INTERSECT, MINUS
  • (20-2)
    Example Realizzare una query differenza senza l'operatore MINUS: un uso particolare di NOT EXISTS
  • (20-3)
    Adattare e fondere tabelle: il caso particolare dell'operatore UNION
  • (20-4)
    Example Sotto-query correlate e scorrelate: considerazioni di efficienza
  • (20-5)
    Example Soluzioni alternative alle sotto-query: usare i join in maniera creativa
  • (20-6)
    Le viste
  • (20-7)
    Creazione di viste: CREATE VIEW
  • (20-8)
    Example Uso delle viste nelle query (per modularizzare e semplificare)
  • (20-9)
    Example Uso delle viste per limitare l'accesso ai dati
  • (20-10)
    Example Usare l'istruzione CREATE TABLE AS per la creazione di snapshot sui dati
  • (20-11)
    Le Stored Procedures e Functions
  • (20-12)
    Le Stored Procedures e Functions in MySQL
  • (20-13)
    Il terminatore di istruzioni nelle procedure
  • (20-14)
    Creazione di una procedura: CREATE PROCEDURE
  • (20-15)
    Codice per le procedure: blocchi BEGIN...END
  • (20-16)
    Codice per le procedure: blocchi e label
  • (20-17)
    Uso di statement SQL nelle procedure
  • (20-18)
    Example Vari usi del costrutto SELECT in una procedura: per query scalari, colonna, riga e generiche
  • (20-19)
    Invocazione di procedure: CALL
  • (20-20)
    Example Procedure come query parametriche
  • (20-21)
    Parametri di input nelle procedure
  • (20-22)
    Example Creazione di tabelle temporanee (nelle procedure)
  • (20-23)
    Costrutti di flusso per le procedure: IF...THEN...ELSE
  • (20-24)
    Parametri di output nelle procedure
  • (20-25)
    Example Invocare una procedura con parametri OUT e impostarne correttamente il valore
  • (20-26)
    Impostare il valore di una variabile con SET
  • (20-27)
    Example Creare variabili globali (di sessione) nell'interprete SQL: la sintassi @variabile

Lecture 21: Advanced SQL: cursors e triggers

2025-05-21, 08:30 (3 hours)
Slides SQL
Material SQL_Examples - Campionati

  • (21-1)
    La clausola INTO del costrutto SELECT
  • (21-2)
    Dichiarare variabili locali in una procedura con DECLARE
  • (21-3)
    Creazione di una funzione: CREATE FUNCTION
  • (21-4)
    Parametri e tipo di ritorno (RETURNS) nelle funzioni
  • (21-5)
    Restituire un valore da una funzione con RETURN
  • (21-6)
    Example Uso di funzioni user-defined nelle query
  • (21-7)
    Example Creare procedure e funzioni complesse per incorporare la logica di accesso e manipolazione del database
  • (21-8)
    Costrutti di flusso per le procedure: IF...THEN...ELSE, CASE...WHEN, WHILE, LOOP, REPEAT...UNTIL
  • (21-9)
    Le istruzioni LEAVE e ITERATE
  • (21-10)
    Cenni sulle conditions in SQL
  • (21-11)
    Cenni sugli stati SQL (SQLSTATE)
  • (21-12)
    Segnalare una condizione anomala in una procedura: SIGNAL
  • (21-13)
    Example Creare procedure e funzioni complesse per incorporare la logica di controllo e manipolazione del database, parte 1
  • (21-14)
    La funzione last_insert_id()
  • (21-15)
    Le conditions SQL e gli handler
  • (21-16)
    Dichiarazione di handler: DECLARE HANDLER
  • (21-17)
    Similitudini e differenze tra gli handler SQL e i blocchi try di JAVA
  • (21-18)
    EXIT e CONTINUE handlers
  • (21-19)
    Muoversi tra i record restituiti da una query: i cursori
  • (21-20)
    Gestione del ciclo di vita di un cursore: DACLARE CURSOR, OPEN, FETCH, CLOSE
  • (21-21)
    Gestire la condizione di fine record (NOT FOUND) con un handler
  • (21-22)
    Example Creare procedure e funzioni complesse per incorporare la logica di controllo e manipolazione del database, parte 2
  • (21-23)
    I Trigger
  • (21-24)
    Creazione di un trigger: CREATE TRIGGER
  • (21-25)
    Eventi gestibili da un trigger: INSERT, UPDATE, DELETE
  • (21-26)
    Tempo di esecuzione dei trigger: AFTER e BEFORE
  • (21-27)
    Usi comuni dei trigger: controllo, completamento, calcolo
  • (21-28)
    I record NEW e OLD nel codice dei trigger (in base all'evento gestito)
  • (21-29)
    Example Esempi di trigger di controllo e calcolo per il database dei campionati, parte 1
  • (21-30)
    Trigger multipli e ordine di esecuzione (FOLLOWS e PRECEDES)

Lecture 22: Databases and programming languages: Java

2025-05-23, 09:30 (2 hours)
Slides SQL
Material Java_JDBC_Example_MySQL

  • (22-1)
    Le Transazioni
  • (22-2)
    Gestire le transazioni: START TRANSACTION, COMMIT, ROLLBACK
  • (22-3)
    Autocommit delle transazioni
  • (22-4)
    Gestione delle transazioni in MySQL
    link https://dev.mysql.com/doc/refman/8.0/en/commit.html
  • (22-5)
    Interfacciamento dei DBMS con i linguaggi di programmazione
  • (22-6)
    JAVA e i DBMS
  • (22-8)
    Specifica e caricamento di un driver DBMS con il JDBC
  • (22-9)
    Le connection string JDBC
  • (22-10)
    Example Connessione a una base di dati con il JDBC tramite il DriverManager
  • (22-11)
    Example Liberare le risorse JDBC: chiusura corretta degli oggetti
  • (22-12)
    Example Creare uno Statement JDBC
  • (22-13)
    Example Interrogare la base di dati con uno Statement JDBC (executeQuery)
  • (22-14)
    Example Gestione dei risultati di una query tramite i ResultSet JDBC
  • (22-15)
    Example Inserire/Aggiornare record tramite una Statement JDBC (executeUpdate)
  • (22-16)
    Query parametriche: i problemi degli statement costruiti con concatenazioni di stringa
  • (22-17)
    La SQL injection
  • (22-18)
    Precompilazione di statement: i PreparedStatement
  • (22-19)
    Example Definire e impostare i parametri di un PreparedStatement
  • (22-20)
    Example Eseguire un PreparedStatement
  • (22-21)
    Chiamare una stored procedure da Java: i CallableStatement
  • (22-22)
    Example Predisporre un CallableStatement con parametri IN
  • (22-23)
    Example Eseguire un CallableStatement
  • (22-24)
    Example Leggere la tabella generata da una stored procedure
  • (22-25)
    Example Registrare dei parametri OUT per un CallableStatement e leggerne il valore dopo l'esecuzione
  • (22-26)
    Example Eseguire una chiamata a funzione tramite un CallableStatement
  • (22-27)
    Example Gestire le transazioni in Java: disabilitare l'autocommit
  • (22-28)
    Example Gestire le transazioni in Java: i metodi commit e rollback della Connection

Lecture 23: Databases and programming languages: advanced topics

2025-05-28, 08:30 (2 hours)
Slides SQL

Lecture 24: Discussion on final projects

2025-05-30, 09:30 (2 hours)

  • (24-1)
    Chiarimenti relativi ai progetti d'esame e discussione con i singoli gruppi