Diario delle Lezioni - A.A. 2023/2024

Lezione 1: Introduzione al corso

28/02/2024, ore 08:30 (3 ore)

  • (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)
    Esempio I I DBMS serverless come SQLite
  • (1-6)
    Perché usiamo (ancora) il modello relazionale?
  • (1-7)
    E le basi di dati NoSQL?
  • (1-8)
    Esempio L'affermazione delle basi di dati document-oriented come MongoDB
  • (1-9)
    Esempio I L'affermazione delle basi di dati a grafo nelle applicazioni di data analytics
  • (1-10)
    SQL e NoSQL sono veramente mondi isolati?
  • (1-11)
    Esempio 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)
    Esempio L'Università: analisi dei requisiti

Lezione 2: Modellazione ER 1

01/03/2024, ore 09: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)
    Attributi composti
  • (2-9)
    Esempio 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)
    Esempio L'Università: chiavi
  • (2-15)
    Esempio Entità (apparentemente) prive di chiave
  • (2-16)
    Esempio L'Azienda: analisi dei requisiti

Lezione 3: Modellazione ER 2

06/03/2024, ore 08:30 (3 ore)
Slides ER

  • (3-1)
    Esempio 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)
    Esempio Il supermercato: entità (e generalizzazioni), attributi e chiavi
  • (3-6)
    Relazioni
  • (3-7)
    Relazioni non binarie
  • (3-8)
    Auto-Relazioni
  • (3-9)
    Ruoli nelle relazioni
  • (3-10)
    Esempio Il supermercato: relazioni
  • (3-11)
    Relazioni e generalizzazioni

Lezione 4: Modellazione ER 3

08/03/2024, ore 09:30 (2 ore)
Slides ER

  • (4-1)
    Generalizzazioni e chiavi
  • (4-2)
    Attributi sulle relazioni
  • (4-3)
    Esempio Il supermercato: attributi sulle relazioni
  • (4-4)
    Esempio L'azienda: relazioni
  • (4-5)
    Esempio L'azienda: attributi sulle relazioni
  • (4-6)
    Esempio Modellare il concetto di "storico" per un'associazione: soluzioni e considerazioni
  • (4-7)
    Cardinalità delle relazioni
  • (4-8)
    Esempio Il supermercato: relazioni con cardinalità
    materiale ER_Examples - Supermarket
  • (4-9)
    Esempio L'azienda: relazioni con cardinalità
    materiale ER_Examples - Azienda

Lezione 5: Esercitazione finale sui diagrammi ER

15/03/2024, ore 09:30 (2 ore)
Slides ER

  • (5-1)
    Esempio L'Università: relazioni
    materiale ER_Examples - CdL
  • (5-2)
    Entità deboli e chiavi con relazioni
  • (5-3)
    Cardinalità ammesse per le relazioni con entità deboli
  • (5-4)
    Esempio L'Università: chiavi per le entità deboli
  • (5-5)
    Esempio L'Auto-Relazione mutuazione tra gli insegnamenti
  • (5-6)
    Esempio La rivista
  • (5-7)
    Esempio La rivista: considerazioni sullo storage di binari nei DBMS
  • (5-8)
    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/
  • (5-9)
    Esempio La rivista: vari modi di modellare il dominio degli autori

Lezione 6: Ristrutturazione e Ottimizzazione dei diagrammi ER 1

20/03/2024, ore 08:30 (3 ore)
Slides ER-Relazionale

  • (6-1)
    Esempio La rivista: quando una generalizzazione esprime molti più vincoli di una (o due) relazioni
  • (6-2)
    Esempio La rivista: vari modi di modellare il sotto-diagramma uscita/pagina/riquadro/contenuto/articolo/figura
  • (6-3)
    Esempio La rivista: diagramma ER finale
    materiale ER_Examples - Rivista
  • (6-4)
    Ristrutturazione dei diagrammi ER
  • (6-5)
    Parametri di ottimizzazione: determinare lo schema di accesso ai dati dalle funzionalità previste
  • (6-6)
    Cosa significa "cancellare" in una base di dati, quando le entità sono relazionate tra loro?
  • (6-7)
    Ristrutturazione: Eliminazione attributi composti
  • (6-8)
    Ristrutturazione: Eliminazione attributi con cardinalità
  • (6-9)
    Esempio Vari modi per ottimizzare l'eliminazione di un attributo con cardinalità
  • (6-10)
    Ristrutturazione: Attributi derivabili
  • (6-11)
    Criteri per l'introduzione o l'eliminazione di un attributo derivabile
  • (6-12)
    Ottimizzare le strutture ER con la ristrutturazione
  • (6-13)
    Ristrutturazione: fusioni e decomposizioni
  • (6-14)
    Decomposizione di entità
  • (6-15)
    Esempio L'università: decomposizione dell'entità insegnamento
  • (6-16)
    Esempio L'università: l'attributo sillabo... quando è meglio non decomporre troppo ed essere un po' NoSQL
  • (6-17)
    Decomposizione di relazioni
  • (6-18)
    Esempio L'azienda: decomposizione della relazione lavora per lo storico degli impieghi

Lezione 7: Ristrutturazione e Ottimizzazione dei diagrammi ER 2

22/03/2024, ore 09:30 (2 ore)
Slides ER-Relazionale

  • (7-1)
    Ristrutturazione: Eliminazione delle gerarchie
  • (7-2)
    Criteri e metodi per l'eliminazione di una gerarchia
  • (7-3)
    Fusione padre-figli: metodo, vincoli, vantaggi, svantaggi
  • (7-4)
    Esempio Le fusione padre-figli nell'esempio CdL
  • (7-5)
    Fusione figli-padre: metodo, vincoli, vantaggi, svantaggi
  • (7-6)
    Introduzione di relazioni: metodo, vincoli, vantaggi, svantaggi
  • (7-7)
    Esempio La (possibile, ma non ottimale) introduzione di relazioni nell'esempio rivista per la struttura contenuto/articolo/figura
  • (7-8)
    Esempio L'introduzione di relazioni nell'esempio rivista per la struttura autore/dipendente/freelance
  • (7-9)
    Esempio Il supermarket: ottimizzazione e ristrutturazione del modello ER
    materiale ER_Examples - Supermarket - Ristrutturato
  • (7-10)
    Esempio Le fusione figli-padre nell'esempio supermarket per la struttura prodotto/base/composto

Lezione 8: Progettazione logica 1

27/03/2024, ore 08:30 (3 ore)
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)
    Esempio 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)
    Esempio Confronto tra informazione veicolata dalla struttura relazionale ottimizzata e rappresentata nel diagramma ER
  • (8-13)
    Trasformazione ER - Relazionale: entità deboli
  • (8-14)
    Esempio L'università: ottimizzazione e ristrutturazione del modello ER
    materiale ER_Examples - CdL
  • (8-15)
    Esempio L'università: dal modello concettuale ristrutturato a quello logico
    materiale ER_Examples - CdL

Lezione 9: Esercitazione finale sulla progettazione concettuale e logica 1

03/04/2024, ore 08:30 (3 ore)

  • (9-1)
    Esempio L'azienda: ottimizzazione e ristrutturazione del modello ER
    materiale ER_Examples - Azienda
  • (9-2)
    Esempio L'azienda: dal modello concettuale ristrutturato a quello logico
    materiale ER_Examples - Azienda
  • (9-3)
    Esempio Il supermarket:ottimizzazione e ristrutturazione del modello ER
    materiale ER_Examples - Supermarket
  • (9-4)
    Esempio Il supermarket: dal modello concettuale ristrutturato a quello logico
    materiale ER_Examples - Supermarket
  • (9-5)
    Esempio La rivista: ottimizzazione e ristrutturazione del modello ER
    materiale ER_Examples - Rivista
  • (9-6)
    Esempio La rivista: dal modello concettuale ristrutturato a quello logico
    materiale ER_Examples - Rivista
  • (9-7)
    Esempio La banca: dalle specifiche al diagramma ER
    materiale ER_Examples - Banca
  • (9-8)
    Esempio La banca: ottimizzazione e ristrutturazione del modello ER
    materiale ER_Examples - Banca
  • (9-9)
    Esempio La banca: dal modello concettuale ristrutturato a quello logico
    materiale ER_Examples - Banca

Lezione 10: Esercitazione finale sulla progettazione concettuale e logica 2

05/04/2024, ore 09:30 (2 ore)

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

Lezione 11: Introduzione a SQL

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

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

Lezione 12: SQL: creazione di database e tabelle

12/04/2024, ore 09:30 (2 ore)
Slides SQL

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

Lezione 13: SQL: i vincoli 1

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

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

Lezione 14: SQL: i vincoli 2

19/04/2024, ore 09:30 (2 ore)
Slides SQL

  • (14-1)
    Vincoli di integrità referenziale: il costrutto MATCH
  • (14-2)
    Esempio 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)
    Esempio Le combinazioni di azioni più frequenti (e più sensate) per ON DELETE e ON UPDATE
  • (14-5)
    Esempio 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 in MySQL
  • (14-9)
    Esempio Cancellare un vincolo UNIQUE usando DROP INDEX in MySQL
  • (14-10)
    Esempio L'Azienda: implementazione fisica con SQL
    materiale SQL_Examples - Azienda

Lezione 15: Esercitazione finale sulla progettazione di un database

24/04/2024, ore 08:30 (3 ore)

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

Lezione 16: SQL: query di base

03/05/2024, ore 09:30 (2 ore)
Slides SQL
Materiale 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)
    Esempio Violazione di vincoli e relativi messaggi di errore di MySQL
  • (16-4)
    Esempio Visualizzare rapidamente il contenuto di una tabella nel Workbench
  • (16-5)
    Esempio 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)
    Esempio 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)
    Esempio 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)
    Esempio 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)
    Esempio Perchè usare gli alias di colonna?
  • (16-26)
    Eliminazione dei duplicati: DISTINCT

Lezione 17: SQL: sotto-query e join interni

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

  • (17-1)
    Usare la funzione MySQL last_insert_id() per estrarre il valore dell'ultima chiave auto_increment generata
  • (17-2)
    Ordinamento dei risultati di una query: la clausola ORDER BY
  • (17-3)
    Esempio Ordinamento su colonne calcolate o non estratte dalla query
  • (17-4)
    Limitazione dell'output: la clausola (non standard) LIMIT
  • (17-5)
    Esempio Paginazione (efficiente) dei risultati con la clausola LIMIT
  • (17-6)
    Sotto-query semplici
  • (17-7)
    Esempio Sotto-query scalari usate nelle clausole WHERE e SELECT
  • (17-8)
    Sotto-query correlate e visibilità degli identificatori
  • (17-9)
    Esempio Sotto-query lista usate con l'operatore IN
  • (17-10)
    Esempio Sotto-query usate con un operatori di confronto
  • (17-11)
    Uso dei quantificatori ANY e ALL con query lista
  • (17-12)
    Join tra tabelle
  • (17-13)
    Join impliciti: condizioni di join e clausola WHERE
  • (17-14)
    Esempio Condizioni di join semplici e multiple
  • (17-15)
    Esempio Mescolare condizioni di filtro e di join nella clausola WHERE
  • (17-16)
    Join espliciti con l'operatore JOIN
  • (17-17)
    Join interni: l'operatore INNER JOIN e le sue varianti
  • (17-18)
    Esempio Spostare le condizioni di WHERE nel JOIN
  • (17-19)
    Esempio Scrivere JOIN multipli concatenati

Lezione 18: SQL: join esterni e aggregazione di record

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

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

Lezione 19: Esercitazione sulle query

15/05/2024, ore 08:30 (3 ore)
Slides SQL
Materiale 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)
    Esempio Esercitazione finale sulle query: interrogazioni sul campionato di calcio
  • (19-6)
    Esempio Creare query complesse usando raggruppamenti e sotto-query
  • (19-7)
    Combinazione di query tramite operatori insiemistici: UNION, INTERSECT, MINUS
  • (19-8)
    Esempio Realizzare una query differenza senza l'operatore MINUS: un uso particolare di NOT EXISTS
  • (19-9)
    Adattare e fondere tabelle: il caso particolare dell'operatore UNION
  • (19-10)
    Esempio Sotto-query correlate e scorrelate: considerazioni di efficienza
  • (19-11)
    Esempio Soluzioni alternative alle sotto-query: usare i join in maniera creativa

Lezione 20: SQL avanzato: procedure e funzioni

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

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

Lezione 21: SQL avanzato: cursori e trigger

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

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

Lezione 22: Basi di dati e linguaggi di programmazione: Java

29/05/2024, ore 08:30 (3 ore)
Slides SQL
Materiale Java_JDBC_Example_MySQL

  • (22-1)
    Esempio Esempi di trigger di controllo e calcolo per il database dei campionati, parte 2
  • (22-2)
    Le Transazioni
  • (22-3)
    Gestire le transazioni: START TRANSACTION, COMMIT, ROLLBACK
  • (22-4)
    Autocommit delle transazioni
  • (22-5)
    Gestione delle transazioni in MySQL
    link https://dev.mysql.com/doc/refman/8.0/en/commit.html
  • (22-6)
    Interfacciamento dei DBMS con i linguaggi di programmazione
  • (22-7)
    JAVA e i DBMS
  • (22-9)
    Specifica e caricamento di un driver DBMS con il JDBC
  • (22-10)
    Le connection string JDBC
  • (22-11)
    Esempio Connessione a una base di dati con il JDBC tramite il DriverManager
  • (22-12)
    Esempio Liberare le risorse JDBC: chiusura corretta degli oggetti
  • (22-13)
    Esempio Creare uno Statement JDBC
  • (22-14)
    Esempio Interrogare la base di dati con uno Statement JDBC (executeQuery)
  • (22-15)
    Esempio Gestione dei risultati di una query tramite i ResultSet JDBC
  • (22-16)
    Esempio Inserire/Aggiornare record tramite una Statement JDBC (executeUpdate)
  • (22-17)
    Query parametriche: i problemi degli statement costruiti con concatenazioni di stringa
  • (22-18)
    La SQL injection
  • (22-19)
    Precompilazione di statement: i PreparedStatement
  • (22-20)
    Esempio Definire e impostare i parametri di un PreparedStatement
  • (22-21)
    Esempio Eseguire un PreparedStatement

Lezione 23: Basi di dati e linguaggi di programmazione: argomenti avanzati

31/05/2024, ore 09:30 (2 ore)
Slides SQL

  • (23-1)
    Esempio Specificare le colonne auto-generate da leggere dopo una INSERT
  • (23-2)
    Esempio Leggere gli ID auto-generati con al getGeneratedKeys
  • (23-3)
    Chiamare una stored procedure da Java: i CallableStatement
  • (23-4)
    Esempio Predisporre un CallableStatement con parametri IN
  • (23-5)
    Esempio Eseguire un CallableStatement
  • (23-6)
    Esempio Leggere la tabella generata da una stored procedure
  • (23-7)
    Esempio Registrare dei parametri OUT per un CallableStatement e leggerne il valore dopo l'esecuzione
  • (23-8)
    Esempio Eseguire una chiamata a funzione tramite un CallableStatement
  • (23-9)
    Esempio Gestire le transazioni in Java: disabilitare l'autocommit
  • (23-10)
    Esempio Gestire le transazioni in Java: i metodi commit e rollback della Connection
  • (23-11)
    PHP e i DBMS
  • (23-12)
  • (23-13)
    Interrogare una base di dati in PHP
  • (23-14)
    Gestione dei risultati di una query in PHP
  • (23-15)
    Esempio Riassunto delle modalità d'uso del JDBC (con MySQL)
    materiale Java_JDBC_Example_MySQL
  • (23-16)
    Incorporare il DBMS SQLite in un'applicazione Java
    link https://github.com/xerial/sqlite-jdbc
  • (23-17)
    Esempio Riassunto delle modalità d'uso del JDBC (con SQLite)
    materiale Java_JDBC_Example_SQLite
  • (23-18)
    Performance nell'accesso ai dati per applicazioni concorrenti: il problema delle connessioni
  • (23-19)
    Riutilizzare le connessioni JDBC: il connection pooling
  • (23-20)
    Esempio Realizzare il connection pooling con il JDBC e la libreria Apache Commons DBCP2
    link https://commons.apache.org/proper/commons-dbcp
    materiale Java_JDBC_CP_Example_MySQL

Lezione 24: Revisione progetti

05/06/2024, ore 08:30 (2 ore)

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