Sito ufficiale del corso di Basi di Dati (04AFQPC) per studenti della Laurea Triennale in Ing. del Cinema e dei Mezzi di Comunicazione.
Avvisi
- 2020-09-20: Benvenuti all'edizione 2021/2022 del corso!
- La prima lezione del corso è giovedì 30/09 dalle 8.30 alle 11.30
- I laboratori inizieranno la settimana del 18 ottobre
- La nuova sezione "FAQ" su questo sito contiene le risposte ai dubbi e alle domande inserite come feedback all'interno dei quiz associati alle videolezioni.
- Nella sezione Esercitazioni sono stati aggiunti tutti gli esercizi svolti in classe nel corso della prima esercitazione.
- [NEW] Date dei prossimi laboratori:
- lab #5 (SQL): mar 23/11 e ven 26/11
- lab #6 (MongoDB): mar 30/11 e ven 3/12
- lab #7 (MongoDB): mar 14/12 e ven 17/12
- lab #8 (simulazione esame): mar 11/1 e ven 14/1
Informazioni
Presentazione
- Lucidi di introduzione al corso
- Regole d'esame
- Pagina ufficiale del corso sul Portale della Didattica
- Il corso aderisce al progetto OCSE dal titolo «Fostering and assessing creativity and critical thinking in higher education and teacher education»
Docenti
- prof. Laura Farinetti (This email address is being protected from spambots. You need JavaScript enabled to view it.)
- ing. Lorenzo Canale (This email address is being protected from spambots. You need JavaScript enabled to view it.)
Orario del corso
Giorno e ora | Tipologia | Aula | Note |
Giovedì 8:30-11:30 | Lezione/esercitazione | 4I | in presenza |
Venerdì 14:30-16:00 | Lezione/esercitazione | Virtual Classroom | in remoto |
Martedì 14:30-16:00 | Laboratorio squadra 1 | LAIB2B | in presenza |
Venerdì 10:00-11:30 | Laboratorio squadra 2 | Virtual Classroom | in remoto |
NON tutte le ore del calendario ufficiale saranno svole, e le attività potranno variare da settimana a settimana: consultare frequentemente la sezione Piano del corso per informazioni più dettagliate, sempre aggiornate.
Materiale di studio
- Materiale fornito dai docenti
Testo di riferimento
- Atzeni, Ceri, Paraboschi, Torlone, “Basi di dati - Modelli e linguaggi di interrogazione”, 4 ed., McGraw Hill, 2013.
Modalità di comunicazione con i docenti
- Tramite Slack: https://join.slack.com/t/corsobasidati-0ug4404/shared_invite/zt-wgr595sw-eRj6x_uTspfYPPAHFEy2kg
Programma del corso
Presentazione
Insegnamento obbligatorio per la Laurea Triennale in Ingegneria del Cinema e dei Mezzi di Comunicazione, collocato al I pd del III anno. Il corso descrive i sistemi per la gestione di basi di dati, considerando le metodologie di progettazione di basi di dati e la loro gestione e interrogazione. L'attività di laboratorio permette di sperimentare l'uso dei prodotti open-source più diffusi.
Risultati attesi
- Conoscenza degli aspetti fondamentali di un sistema per la gestione di basi di dati
- Conoscenza della struttura e delle proprietà del modello relazionale dei dati
- Conoscenza dei principi alla base delle basi di dati NoSQL
- Capacità di scrivere interrogazioni in linguaggio SQL
- Conoscenza del modello concettuale Entità-Relazione per la rappresentazione dei dati e della metodologia per la progettazione concettuale e logica relazionale di una base di dati
- Capacità di progettare una base di dati relazionale
- Conoscenza dei costrutti SQL per la gestione delle viste, del controllo dell'accesso e per la gestione delle transazioni e degli indici
Prerequisiti
Competenze di base di programmazione.
Programma
- Caratteristiche di un sistema per la gestione di basi di dati
- Caratteristiche del modello relazionale dei dati
- Linguaggio SQL: istruzioni per la definizione delle basi di dati e l'elaborazione dei dati
- Linguaggio SQL: istruzioni per la gestione delle viste, del controllo dell'accesso, delle transazioni e degli indici
- Modello concettuale dei dati (modello Entità-Relazione) e metodologia di progettazione concettuale e logica relazionale di una base di dati
- Cenni sulle basi dati NoSQL
Laboratori e/o esercitazioni
Esercitazioni in aula: svolgimento di esercizi in aula (linguaggio SQL e progettazione di basi di dati).
Esercitazioni in laboratorio: interrogazioni di basi dati in SQL.
Modalita' di verifica dell'apprendimento
Vedere le Regole d'esame.
Materiale
Questa sezione conterrà tutto il materiale didattico (slide, documenti, link, ...) utilizzato durante il corso.
Lucidi delle lezioni
- Introduzione al corso
- Introduzione alle basi di dati
- Modello relazionale
- Linguaggio SQL: fondamenti
- Linguaggio SQL: costrutti avanzati
- Progettazione di basi di dati
- Basi dati NoSQL
Esercitazioni
- Esercitazione 1 (esercizi svolti in classe): Esercitazione 1
- Esercitazione 2 (esercizi svolti in classe): Esercitazione 2
- Esercitazione del 4/11 e 5/11
Esercizi vari
- SQL base: testo e soluzioni
- SQL - 1: testo e soluzioni
- SQL - 2: testo e soluzioni
- SQL - 3: testo e soluzioni
- Altri esercizi proposti di SQL
- Esercitazione SQL-5: esercizi proposti e soluzioni
- Temi D'Esame SQL: esercizi proposti e soluzioni
- Esercizi di progettazione concettuale e logica: testo
- Altri esercizi di progettazione concettuale e logica: testo e soluzioni
- Risoluzione Cluedo: Soluzione Cluedo SQL
Laboratori
- Non esiste una suddivisione in squadre, potete frequentare con la modalità che ritenete più efficace:
- Squadra 1, IN PRESENZA, martedì dalle 14.30 alle 16.00 al LAIB2B (ricordate di prenotare)
- Squadra 2, ONLINE, venerdì dalle 10.00 alle 11.30 in Virtual Classroom
- Laboratorio 1: prime interrogazioni in SQL
- Laboratorio 2: funzioni aggregate, raggruppamento
- Database: world (è lo stesso del laboratorio precedente, chi l'ha già importato può evitare di scaricarlo)
- Testo
- Risultati attesi
- Soluzione
- Laboratorio 3
- Database: world (è lo stesso del laboratorio precedente, chi l'ha già importato può evitare di scaricarlo)
- Testo
- Risultati attesi
- Soluzione
- Laboratorio 4
- Database: deliveries
- Testo
- Risultati attesi
- Soluzione
- Laboratorio 5
- Database: deliveries (è lo stesso del laboratorio precedente, chi l'ha già importato può evitare di scaricarlo)
- Testo
- Risultati attesi
- Soluzione
- Laboratorio 6
- Laboratorio 7
Team based learning
Link al gioco ("CluedoSQL"): https://forms.gle/4SDCkxvX6cFjK1G38
Strumenti
Strumento suggerito:
-
XAMPP
(contiene sia il Database Managment System che l'interfaccia grafica):- guida all'installazione per Windows: https://youtu.be/y18fZ4Iz18Q (ATTENZIONE! Rispetto al video installare la versione 8.0.11)
- guida all'installazione per Mac OS X: https://youtu.be/eIvg6v68U2Q
- guida all'installazione per Linux: https://youtu.be/P7butoSPOas
Strumenti alternativi:
- il Database Managment System
MariaDB:
- installazione per Windows e Linux: https://downloads.mariadb.org/
- installazione per Mac OS X: https://mariadb.com/resources/blog/installing-mariadb-10-1-16-on-mac-os-x-with-homebrew/
- un'interfaccia grafica:
HeidiSQL
per Windows: https://www.heidisql.com/download.phpSequel Pro
per Mac OS X: http://www.sequelpro.com/Dbeaver
per Linux: https://dbeaver.io/
Slides su XAMPP:
Esame
Temi d'esame
Molti temi d'esame sono di altri corsi di Basi Dati, ma il livello degli esercizi di SQL e di progettazione concettuale e logico-relazionale è identico. IMPORTANTE: ignorare sempre l'esercizio (a) della Parte A, che riguarda l'algebra relazionale (che non fa parte del nostro programma).
- Tema 1: testo e soluzione
- Tema 2: testo e soluzione
- Tema 3: testo e soluzione
- Tema 4: testo e soluzione
- Tema 5: testo, soluzioneSQL e soluzioneER
- Tema 6: testo, soluzioneSQL e soluzioneER
- Tema 7: testo e soluzioneSQL
Piano del corso
In questa sezione trovate:
- il calendario delle lezioni del corso, in cui sono riportate le attività e gli argomenti;
- l'elenco delle videolezioni, con la data di pubblicazioni e le scadenze per i quiz.
Calendario delle lezioni
La tabella seguente riporta la pianificazione delle lezioni FUTURE del corso (quelle già svolte sono cancellate dalla tabella), per trasparenza di informazione e per facilitare la pianificazione da parte degli studenti. Ci riserviamo di modificare la pianificazione delle lezioni per esigenze didattiche.
Nella tabella sono riportate solo le attività “sincrone”, cioè in diretta o in Virtual Classroom.
IMPORTANTE: Si noti che non tutte le lezioni indicate nell'orario ufficiale verranno utilizzate.
Legenda: la colonna Tipo può essere L-P=Lezione in presenza, Es-P=Esercitazione in presenza, Lab-P=Esercitazione di laboratorio in presenza, Es-R=Esercitazione online, Lab-P=Esercitazione di laboratorio online, C-P=Consulenza in presenza, C-R=Consulenza online. VC=Virtual Classroom.
Data | Ore | Tipo | Ore | Argomento | Aula | Docente |
---|---|---|---|---|---|---|
mar 09/11/2021 | 14.30-16.00 | Lab-P | 1,5 | Laboratorio #4: SQL. Squadra in presenza | LAIB2B | Lorenzo Canale |
ven 12/11/2021 | 10.00-11.30 | Lab-R | 1,5 | Laboratorio #4: SQL. Squadra online | VC | Lorenzo Canale |
ven 12/11/2021 | 14.30-15.00 | C-R | 0,5 | Q&A videolezioni | VC | Laura Farinetti |
gio 18/11/2021 | 8.30-13.00 | Es-P | 4,5 | Team-based learning su SQL. | 4I | Laura Farinetti |
mar 23/11/2021 | 14.30-16.00 | Lab-P | 1,5 | Laboratorio #5: SQL. Squadra in presenza | LAIB2B | Lorenzo Canale |
gio 25/11/2021 | 9.30-10.00 | C-P | 0,5 | Q&A videolezioni | 4I | Laura Farinetti |
gio 25/11/2021 | 10.00-11.30 | Es-P | 1,5 | Esercitazione su progettazione concettuale. | 4I | Laura Farinetti |
ven 26/11/2021 | 10.00-11.30 | Lab-R | 1,5 | Laboratorio #5: SQL. Squadra online | VC | Lorenzo Canale |
ven 26/11/2021 | 14.30-16.00 | Es-R | 1,5 | Esercitazione su progettazione concettuale. | VC | Laura Farinetti |
mar 30/11/2021 | 14.30-16.00 | Lab-P | 1,5 | Laboratorio #6: MongoDB. Squadra in presenza | LAIB2B | Lorenzo Canale |
gio 02/12/2021 | 10.00-11.30 | Es-P | 1,5 | Esercitazione in aula (per tutti) | 4I | Lorenzo Canale |
ven 03/12/2021 | 10.00-11.30 | Lab-R | 1,5 | Laboratorio #6: MongoDB. Squadra online | VC | Lorenzo Canale |
ven 03/12/2021 | 14.30-15.00 | C-R | 0,5 | Q&A videolezioni | VC | Laura Farinetti |
gio 09/12/2021 | 9.30-10.00 | C-P | 0,5 | Q&A videolezioni | 4I | Laura Farinetti |
gio 09/12/2021 | 10.00-11.30 | Es-P | 1,5 | Esercitazione "CCT" su progettazione a squadre. Squadra in presenza | 4I | Laura Farinetti |
ven 10/12/2021 | 14.30-16.00 | Es-R | 1,5 | Esercitazione "CCT" su progettazione a squadre. Squadra online | VC | Laura Farinetti |
mar 14/12/2021 | 14.30-16.00 | Lab-P | 1,5 | Laboratorio #7: MongoDB. Squadra in presenza | LAIB2B | Lorenzo Canale |
gio 16/12/2021 | 8.30-13.00 | Es-P | 4,5 | Team-based learning su progettazione delle basi dati. | 4I | Laura Farinetti |
ven 17/12/2021 | 10.00-11.30 | Lab-R | 1,5 | Laboratorio #7: MongoDB. Squadra online | VC | Lorenzo Canale |
mar 11/01/2022 | 14.30-16.00 | Lab-P | 1,5 | Laboratorio #8: Temi d'esame. Squadra in presenza | LAIB2B | Lorenzo Canale |
gio 13/01/2022 | 8.30-11.30 | Es-P | 3 | Esercitazione (per tutti) | 4I | Lorenzo Canale |
ven 14/01/2022 | 10.00-11.30 | Lab-R | 1,5 | Laboratorio #8: Temi d'esame. Squadra online | VC | Lorenzo Canale |
Programmazione delle videolezioni
La tabella riporta l'elenco delle videolezioni pre-registrate, che si trovano nella sezione "Virtual Classroom" del Portale della Didattica. I quiz si trovano nella sezione "Exercise" del Portale della Didattica, e possono essere sottomessi dalla data di pubblicazione della relativa videolezione fino alla data di scadenza riportata in tabella.
FAQ
Questa sezione contiene le risposte ai dubbi e alle domande inserite come feedback all'interno dei quiz associati alle videolezioni.
VL01 – Modello relazionale
Qual’è la differenza fra vincolo di dominio e vincolo di tupla?
Il vincolo di dominio esprime condizioni sul valore di un singolo attributo (e.g. Voto > 0 AND Voto <= 30), il vincolo di tupla esprime condizioni sul valore assunto dalle singole tuple di una relazione, in modo indipendente dalle altre tuple (e.g. Prezzo = Costo + PercIVA*Costo)
Cos’è il vincolo di chiave?
Il vincolo di chiave, o più precisamente il “vincolo di chiave primaria” definisce che ogni relazione deve avere una “chiave primaria”, cioè un insieme di attributi che identifica in modo univoco le tuple della relazione (in altre parole, non esistono due tuple che hanno lo stesso valore della chiave primaria). Una chiave primaria è univoca (cioè una relazione non deve contenere due tuple con lo stesso valore della chiave primaria), minimale (cioè non devono esistere sottoinsiemi di attributi della chiave che hanno la proprietà di univocità) e “non nullabile” (cioè non accetta il valore NULL).
I vincoli di chiave (primaria) sono i vincoli di unicità?
No, non sono la stessa cosa. La definizione di vincolo di chiave primaria include il vincolo di unicità (una chiave primaria ha la proprietà di univocità) ma è possibile definire il vincolo di unicità anche per altri attributi (o insiemi di attributi): in questo caso non possono esserci valori duplicati di tali attributi (o di tale combinazione di attributi) ma è possibile che vengano assegnati valori NULL (anche più di uno).
Cosa significa che NULL è compatibile con tutti i domini ma non appartiene a nessuno di questi?
Il valore NULL (che rappresenta un valore non conosciuto, o non rilevante) è compatibile con tutti i domini, nel senso che può essere assegnato ad un attributo di qualunque dominio (numero intero, stringa, data, …). È un valore che però non fa parte di nessun dominio (cioè non è una stringa o un numero intero, …)
Qual’è la differenza fra vincolo di chiave primaria e vincolo di chiave esterna?
Il vincolo di chiave primaria definisce che ogni relazione deve avere una “chiave primaria”, cioè un insieme di attributi che identifica in modo univoco le tuple della relazione (e.g. l’attributo CodP della relazione P). Il vincolo di chiave esterna (o “foreign key”) è invece relativo ad un vincolo di integrità referenziale, e definisce chiave esterna un insieme di attributi (della relazione referenziante) che fa riferimento ad un insieme di attributi della relazione referenziata (e.g. l’attributo CodP della relazione FP è una chiave esterna e fa riferimento all’attributo CodP della relazione P).
Cos’è il vincolo di integrità referenziale?
Nel modello relazionale (modello logico con i riferimenti basati sui valori degli attributi) il vincolo di integrità referenziale è fondamentale per garantire la correttezza dei riferimenti fra le relazioni. Il vincolo garantisce che i valori assunti dagli attributi della relazione referenziante (e.g. i valori assunti da CodP nella relazione FP) siano effettivamente presenti nella relazione referenziata (e.g. i valori assunti da CodP nella relazione P).
Qual’è la differenza fra relazione referenziante e relazione referenziata?
La relazione referenziante è quella che fa riferimento alla relazione referenziata attraverso i valori di un sottoinsieme dei suoi attributi, che devono contenere valori presenti nella relazione referenziata. Non esistono “regole” per distinguere qual’è la relazione referenziata e quella referenziante, ma si può capire guardando lo schema e riflettendo sui legami fra le relazioni: le relazioni che rappresentano classi di oggetti (e.g. i prodotti, i corsi, gli studenti, …) solitamente sono relazioni referenziate, mentre quelli che riguardano dei legami fra le classi di oggetti (e.g. le forniture, che legano prodotti e fornitori, gli esami che legano studenti e corsi, …) solitamente sono relazioni referenzianti. Questo aspetto sarà approfondito nella parte di progettazione delle basi dati.
VL02 – Istruzione SELECT: struttura base
Il carattere ‘%’ nella stringa che segue il LIKE può indicare anche "nessun carattere"?
Sì, la stringa che segue l’operatore LIKE può contenere due caratteri speciali: “_” indica uno e un solo carattere, e “%” indica una stringa composta da un numero di caratteri qualunque, compresa la stringa vuota (0 caratteri).
Se volessi scrivere come condizione che la quinta lettera di NomeP deve essere una 'e', è corretto scrivere WHERE NomeP LIKE '_ _ _ _e%' ?
Sì, è corretto: ci sono 4 caratteri qualunque, una ‘e’ in quinta posizione, e nel seguito qualunque altra sottostringa.
Nella query “SELECT DISTINCT Cognome FROM IMPIEGATO WHERE CodDip <> 'D06'” se ci sono due Bruni, con quale criterio ne scelgo uno al posto dell'altro? (in caso ci fosse anche Nome nella SELECT)
In questo caso nella SELECT non c’è Nome, per cui viene visualizzata solo una riga con cognome ‘Bruni’. Se ci fosse anche Nome comparirebbero tutte le combinazioni diverse di Cognome e Nome (e.g. ad esempio Bruni Margherita e Bruni Renato).
VL03 – Istruzione SELECT: join fra tabelle
Come si usa il join?
Il join di due relazioni A e B genera tutte le coppie formate da una tupla di A e una tupla di B “semanticamente legate”, cioè in cui è vera una condizione, detta “condizione di join” che lega un attributo di A ad un attributo di B. Nella sintassi SQL il join si realizza elencando le tabelle nella clausola FROM e indicando le condizioni di join nella clausola WHERE.
Cos`è il “legame semantico” fra due attributi?
Il legame semantico fra due attributi, ciascuno dei quali appartiene ad una tabella diversa, è il legame su cui si basa la condizione di join, che verifica (attraverso la clausola WHERE) che una data condizione “di legame” sia vera. Il termine “semantico” in questo caso viene utilizzato per mettere in evidenza il fatto che il legame fra le tabelle ha un significato per le tabelle che vengono “unite”, ad esempio il legame che lega il valore di CodP nella tabella P con il valore di CodP della tabella FP. Il legame semantico spesso coinvolge la chiave esterna di una tabella e l’attributo della tabella referenziata a cui la chiave esterna fa riferimento.
Il join si fa tra due tabelle o tra due istanze? Cosa significa “2 istanze” di una tabella?
Si può fare il join fra due tabelle diverse o fra due “istanze” della stessa tabella, cioè fra due copie della stessa tabella.
Come si fa il join fra più di due relazioni?
Il join è un operatore binario, ma nella sintassi SQL è possibile indicare il join fra più tabelle, intendendo che queste vengono “legate semanticamente” a coppie, come definito all’interno della clausola WHERE dalle condizioni di join, che nel caso di N tabelle devono essere almeno N-1. Ad esempio scrivere “FROM F, FP, P” significa che viene eseguito il join fra la tabella P e la tabella FP, e viene poi eseguito il join fra la tabella risultante e la tabella P. Si noti che l’ordine in cui sono eseguiti i join è scelto dall’ottimizzatore SQL in modo trasparente all’utente, che deve indicare semplicemente tutte le tabelle che desidera “unire” specificando tutte le condizioni di join.
VL04 – Istruzione SELECT: funzioni aggregate e GROUP BY
Quali attributi si mettono dopo la GROUP BY? Cosa significa aggiungere un attributo oltre alla chiave primaria?
L’attributo inserito nella clausola GROUP BY è quello che definisce i gruppi che devono essere creati, in modo che ogni gruppo abbia un valore diverso per quell’attributo. Aggiungere un attributo oltre alla chiave primaria non ha nessun effetto per la definizione dei gruppi, perché ad ogni valore della chiave primaria corrisponde sempre un solo valore di ogni altro attributo (ad esempio, ogni matricola ha un solo cognome associato). L’aggiunta di tale attributo è un artificio sintattico, per permettere di visualizzarlo, dato che nella SELECT è possibile indicare solo funzioni aggregate o attributi presenti nella GROUP BY.