Past Courses

Article Index

 

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

  • 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

 


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

Esercitazioni

Esercizi vari

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

 

 

Team based learning

Link al gioco ("CluedoSQL"): https://forms.gle/4SDCkxvX6cFjK1G38

Strumenti

Strumento suggerito:

Strumenti alternativi:

Slides su XAMPP:


 

Esame

Regole d'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).

 


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.

DataOreTipoOreArgomentoAulaDocente
 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.

VideolezioneArgomentoPubblicata entroQuiz associatoScadenza quizSlide
 VL01 Il modello relazionale. Definizioni. Vincoli di integrità. Chiave primaria. Vincoli di integrità referenziale.  mer 29/09/2021  VL01  gio 07/10/2021  iconaPdf
 VL02 Il linguaggio SQL. Introduzione. L'istruzione SELECT. Struttura base. La clausola WHERE. Gli operatori LIKE e IS. Ordinamento del risultato.  mer 29/09/2021  VL02  gio 07/10/2021  iconaPdf
 VL03 L'istruzione SELECT. Join fra tabelle.  mer 29/09/2021  VL03  gio 07/10/2021  iconaPdf
 VL04 L'istruzione SELECT. Funzioni aggregate. L'operatore GROUP BY. Condizione di selezione sui gruppi.  mer 06/10/2021  VL04  mer 13/10/2021  iconaPdf
 VL05 L'istruzione SELECT. Select annidate. Gli operatori IN e NOT IN. Costruttore di tupla.  mer 13/10/2021  VL05  mer 20/10/2021  iconaPdf
 VL06 L'istruzione SELECT. Select annidate. Gli operatori EXISTS e NOT EXISTS. Correlazione fra interrogazioni.  mer 13/10/2021  VL06  mer 20/10/2021  iconaPdf
 VL07 L'istruzione SELECT. Select annidate. Divisione. Table function.  mer 20/10/2021  VL07  gio 28/10/2021  iconaPdf
 VL08 Gli operatori insiemistici: UNION, INTERSECT, EXCEPT. Le istruzioni di aggiornamento: INSERT, DELETE, UPDATE.  mer 27/10/2021  VL08  mer 03/11/2021  iconaPdf
 VL09 Gestione delle tabelle. Creazione, modifica, cancellazione. Vincoli di tabella. Vincoli di integrità referenziale e gestione dei vincoli.  mer 27/10/2021  VL09  mer 03/11/2021  iconaPdf
 VL10 Gestione delle transazioni. Proprietà delle transazioni. Controllo dell'accesso e sicurezza dei dati. Gestione dei privilegi in SQL.   mer 03/11/2021  VL10  gio 11/11/2021  iconaPdf
 VL11 Progettazione delle basi dati. Metodologia di progettazione. Il modello E-R: entità, relazioni, cardinalità, generalizzazione.   mer 10/11/2021  VL11  gio 18/11/2021  iconaPdf
 VL12 Progettazione concettuale delle basi dati. Esempio: data base per la gestione di prenotazioni in una ASL.   mer 10/11/2021  VL12  gio 18/11/2021  iconaPdf
 VL13 Database NoSQL: caratteristiche, confronto con i database relazionali, tipi di database NoSQL. Introduzione a MongoDB.   mer 17/11/2021  VL13  gio 25/11/2021  iconaPdf
 VL14 Progettazione logico-relazionale: ristrutturazione dello schema E-R. Traduzione nel modello relazionale. Vincoli di integrità referenziale.   mer 24/11/2021  VL14  gio 02/12/2021  iconaPdf
 VL15 Esempio di progettazione logico-relazionale: data base per la gestione di prenotazioni in una ASL.   mer 01/12/2021  VL15  gio 09/12/2021  iconaPdf

 


 

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.