EuraStudy
Una base di dati è una raccolta di dati strutturati, persistenti e condivisi, gestita da un software specializzato (il DBMS) che ne garantisce integrità, riservatezza e accesso concorrente. Questo appunto percorre l'intero ciclo di progettazione — dall'analisi della realtà di interesse al modello concettuale Entità-Relazione, fino alla sua traduzione nel modello logico relazionale di Codd e ai vincoli di integrità che ne assicurano la qualità. Si chiude con i principi essenziali della normalizzazione, strumento per eliminare le ridondanze e prevenire le anomalie di aggiornamento.
5 sezioni~23 min di lettura3 competenzeLivello Base 1 · Standard 2 · Approfondimento 2Verificato · 07/2026
livello base
È richiesto saper distinguere dato e informazione, leggere e costruire uno schema E-R semplice e tradurlo in tabelle con chiavi primarie ed esterne coerenti.
livello avanzato
Nel triennio del Liceo Scientifico — opzione Scienze Applicate si approfondiscono la traduzione sistematica delle associazioni (incluse le molti-a-molti), i vincoli di integrità referenziale con le relative politiche e i primi tre livelli di normalizzazione applicati a casi concreti.
Profondità di lettura: Approfondimento
Dimensione del testo: Standard
Architettura a tre livelli di una base di dati
Una biblioteca tiene l'elenco dei libri in un file e l'elenco dei prestiti in un secondo file, ripetendo in entrambi titolo e autore di ogni libro. Spiega quali problemi emergono e quali funzioni del DBMS li risolvono.
Titolo e autore sono memorizzati due volte (nei libri e nei prestiti): lo stesso dato è replicato, sprecando spazio e introducendo il rischio di copie diverse.
Se si corregge il titolo di un libro solo nel primo file, il file dei prestiti resta con il vecchio valore: i dati diventano incoerenti.
Centralizzando i dati in un'unica base di dati, il titolo viene memorizzato una sola volta; il controllo della ridondanza e i vincoli di integrità garantiscono che ogni prestito faccia riferimento a un libro esistente.
Risultato: I problemi sono ridondanza e incoerenza; il DBMS li risolve centralizzando i dati, eliminando le copie e imponendo vincoli di integrità referenziale tra prestiti e libri.
Errori frequenti
Approfondimento
Il servizio più sottile che un DBMS offre è la gestione delle transazioni: una transazione è una sequenza di operazioni trattata come un'unità indivisibile, e deve rispettare le proprietà ACID. L'atomicità (Atomicity) impone che si esegua «tutto o niente»: un bonifico che addebita un conto e accredita l'altro non può fermarsi a metà, altrimenti il denaro sparirebbe. La coerenza (Consistency) assicura che ogni transazione porti la base di dati da uno stato valido a un altro valido, rispettando i vincoli. L'isolamento (Isolation) fa sì che transazioni concorrenti non si disturbino, come se ciascuna girasse da sola. La durabilità (Durability) garantisce che, una volta confermata (commit), la modifica sopravviva anche a un guasto, ottenuta con un giornale (log) — la stessa idea del journaling dei file system. Senza controllo della concorrenza comparirebbero anomalie classiche come l'aggiornamento perduto (lost update), in cui due utenti leggono lo stesso valore e lo sovrascrivono a vicenda; il DBMS lo previene con meccanismi di blocco (locking) sulle risorse. Su tutto veglia l'amministratore della base di dati (DBA). Vale infine la pena ribadire l'indipendenza dei dati resa possibile dall'architettura a tre livelli: si può cambiare l'organizzazione fisica su disco (indici, file) senza toccare lo schema logico, e modificare lo schema logico senza riscrivere tutte le applicazioni, purché le loro viste restino valide — la stessa astrazione a strati che governa reti e sistemi operativi.
Ripasso attivo
Una segreteria scolastica gestisce studenti, classi e voti con tre fogli di calcolo separati, ciascuno con il nome dello studente ripetuto. Individua almeno tre problemi di questa organizzazione e spiega quali servizi di un DBMS li risolverebbero.
Richiamo attivo
Ricorda i punti chiave — poi rivela.
Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) — Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM))
Schema E-R: Studente — si iscrive a — Corso (N:M)
Una scuola di musica registra Allievi e Insegnanti. Ogni allievo segue le lezioni di un solo insegnante, mentre ogni insegnante segue molti allievi. Individua entità, identificatori, l'associazione e la sua cardinalità.
Le classi di oggetti con esistenza autonoma sono Allievo e Insegnante: due entità, due rettangoli.
Per Allievo un codice allievo univoco; per Insegnante un codice insegnante. Sono gli identificatori (chiavi) delle rispettive entità.
L'associazione «è seguito da» lega Allievo e Insegnante. Poiché ogni allievo ha un solo insegnante ma ogni insegnante ha molti allievi, dalla parte dell'Allievo la cardinalità è 1, dalla parte dell'Insegnante è N.
Risultato: Schema E-R con entità Allievo e Insegnante, associazione «è seguito da» di cardinalità 1:N (un insegnante → molti allievi; un allievo → un insegnante).
Errori frequenti
Approfondimento
Il modello E-R è più espressivo dei tre soli costrutti base. Gli attributi si articolano in vari tipi: semplici o composti (un «indirizzo» scomponibile in via, città, CAP), a valore singolo o multivalore (i «recapiti telefonici» di una persona) e derivati (l'«età», calcolabile dalla data di nascita, che quindi non si memorizza). Esistono poi le entità deboli, prive di un identificatore proprio, che si identificano solo attraverso un'entità forte a cui sono legate da un'associazione identificante (per esempio un «familiare a carico» identificato dal dipendente più dal nome). La generalizzazione (o gerarchia ISA) permette di modellare che un'entità generale (Persona) si specializza in sottotipi (Studente, Docente) che ne ereditano gli attributi e ne aggiungono di propri — lo stesso rapporto «è-un» dell'ereditarietà nella programmazione a oggetti, qui applicato ai dati. Sulle cardinalità, la notazione min-max è più precisa del semplice 1:N: a ciascun lato dell'associazione si indicano la partecipazione minima e massima di un'istanza, distinguendo la partecipazione totale (minimo 1: ogni istanza deve partecipare, ogni studente DEVE appartenere a una classe) da quella parziale (minimo 0: la partecipazione è facoltativa). Cogliere questi vincoli nel testo del problema è ciò che rende lo schema concettuale davvero fedele alla realtà che deve rappresentare, prima ancora di tradurlo in tabelle.
Ripasso attivo
Una palestra registra i propri Soci, i Corsi offerti e le Iscrizioni dei soci ai corsi, con la data di iscrizione. Disegna lo schema E-R individuando entità, attributi, identificatori e la cardinalità dell'associazione, motivandola.
Richiamo attivo
Ricorda i punti chiave — poi rivela.
Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) — Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM))
Due tabelle collegate da chiave primaria e chiave esterna
Considera REPARTO(cod_reparto, nome_reparto) e DIPENDENTE(matricola, cognome, cod_reparto). Determina la chiave primaria di ciascuna tabella e la chiave esterna, spiegando il vincolo che ne deriva.
cod_reparto identifica univocamente ogni reparto: è la chiave primaria (univoca, non nulla).
matricola identifica univocamente ogni dipendente: è la chiave primaria di DIPENDENTE.
cod_reparto in DIPENDENTE riferisce la chiave primaria di REPARTO: è una chiave esterna. Il vincolo di integrità referenziale impone che ogni dipendente sia assegnato a un cod_reparto realmente esistente in REPARTO.
Risultato: PK: REPARTO(cod_reparto), DIPENDENTE(matricola); FK: DIPENDENTE.cod_reparto → REPARTO.cod_reparto, con vincolo di integrità referenziale.
Errori frequenti
Approfondimento
Il modello relazionale non è solo un modo di disporre i dati in tabelle: è una teoria matematica, e su di essa poggia un'algebra relazionale che definisce le operazioni con cui interrogarle. Le operazioni fondamentali sono la selezione (σ), che estrae le righe che soddisfano una condizione; la proiezione (π), che estrae determinate colonne; il prodotto cartesiano e soprattutto la giunzione (join, ⋈), che combina due tabelle sulle righe con valori corrispondenti (tipicamente chiave esterna con chiave primaria); e le operazioni insiemistiche unione, differenza e intersezione, che trattano le relazioni come insiemi di tuple. Ogni interrogazione SQL che scriveremo si può ricondurre a una composizione di queste operazioni: è questo fondamento algebrico a garantire che le query abbiano un significato preciso e siano automaticamente ottimizzabili dal DBMS, che può riordinare le operazioni scegliendo il piano di esecuzione più efficiente. Un punto delicato è la semantica del valore nullo (NULL), che rappresenta un dato mancante o non applicabile: introduce una logica a tre valori (vero, falso, sconosciuto), per cui un confronto con NULL non restituisce «vero» né «falso» ma «sconosciuto», e va perciò gestito con operatori appositi (IS NULL). Comprendere che dietro le tabelle c'è un'algebra rigorosa è ciò che distingue chi «usa» un database da chi ne padroneggia i principi.
Ripasso attivo
Data la tabella STUDENTE(matricola, nome, cognome, classe) e la tabella VOTO(id_voto, matricola, materia, valutazione), indica per ciascuna tabella la chiave primaria e individua la chiave esterna, spiegando il vincolo di integrità che essa impone.
Richiamo attivo
Ricorda i punti chiave — poi rivela.
Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) — Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM))
Traduzione di un'associazione N:M con tabella ponte
Traduci lo schema: AUTORE(cod_autore, nome) (1) — scrive — (N) LIBRO(isbn, titolo). Ogni libro ha un solo autore; un autore scrive molti libri.
Ogni entità diventa una tabella: AUTORE(cod_autore, nome) con PK cod_autore; LIBRO(isbn, titolo) con PK isbn.
«scrive» è di cardinalità 1:N (un autore → molti libri; un libro → un autore): non serve una tabella ponte.
Si aggiunge nella tabella dal lato «molti», cioè LIBRO, l'attributo cod_autore come chiave esterna verso AUTORE.cod_autore.
Risultato: AUTORE(cod_autore PK, nome); LIBRO(isbn PK, titolo, cod_autore FK → AUTORE.cod_autore).
Errori frequenti
Approfondimento
Oltre alle tre regole di base, la traduzione deve saper gestire i costrutti più ricchi dell'E-R. Un attributo multivalore non può stare in una colonna, pena la violazione della 1FN: si estrae in una tabella separata, con una chiave esterna verso l'entità d'origine (i «telefoni» di un cliente diventano una tabella TELEFONO con la chiave del cliente). Un'entità debole diventa una tabella la cui chiave primaria è composta dalla chiave dell'entità forte identificante più il proprio identificatore parziale. La traduzione di una generalizzazione (gerarchia ISA) ammette invece tre strategie, da scegliere secondo il caso: accorpare tutto in un'unica tabella del genitore, con un attributo «tipo» e le colonne di tutti i sottotipi (semplice, ma con molti valori nulli); creare una tabella per ciascun sottotipo che include gli attributi ereditati (nessun nullo, ma dati del genitore ripetuti); oppure mantenere una tabella per il genitore e una per ciascun sottotipo, collegate da chiavi (la più normalizzata, al prezzo di join più frequenti). La scelta della politica referenziale, infine, va motivata caso per caso: CASCADE è adatto quando i dati figli non hanno senso senza il padre (le righe di un ordine spariscono con l'ordine), RESTRICT quando si vuole impedire una cancellazione che lascerebbe riferimenti orfani, SET NULL quando il legame è facoltativo. Padroneggiare questi casi meno banali è esattamente ciò che l'indirizzo Scienze Applicate richiede nelle prove di progettazione.
Ripasso attivo
È dato lo schema E-R: AUTORE (1) — scrive — (N) LIBRO, e LIBRO (N) — è prestato a — (M) LETTORE con attributo data_prestito. Traduci l'intero schema nel modello relazionale, indicando per ogni tabella chiave primaria e chiavi esterne.
Richiamo attivo
Ricorda i punti chiave — poi rivela.
Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) — Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM))
Dalla ridondanza alle forme normali
La tabella ESAME(matricola, nome_studente, cod_corso, nome_corso, voto) ha chiave primaria (matricola, cod_corso). Individua le dipendenze anomale e scomponi la tabella fino alla 3FN.
Tutti gli attributi sono atomici (nessuna lista): la tabella è già in 1FN.
nome_studente dipende solo da matricola e nome_corso solo da cod_corso: sono dipendenze parziali dalla chiave composta, quindi la tabella NON è in 2FN.
Si separano: STUDENTE(matricola PK, nome_studente); CORSO(cod_corso PK, nome_corso); ESAME(matricola, cod_corso PK composta, voto). Ora ogni attributo non chiave dipende dall'intera chiave della propria tabella.
Nelle tre tabelle nessun attributo non chiave dipende da un altro attributo non chiave (nessuna dipendenza transitiva): lo schema è in 3FN.
Risultato: STUDENTE(matricola PK, nome_studente); CORSO(cod_corso PK, nome_corso); ESAME(matricola FK, cod_corso FK, voto) con PK (matricola, cod_corso): schema in 3FN.
Errori frequenti
Approfondimento
Alla base della normalizzazione c'è il concetto di dipendenza funzionale: si scrive «X → Y» e si legge «X determina Y» quando, fissato il valore di X, il valore di Y è univocamente determinato (per esempio «matricola → nome_studente»). Le forme normali si definiscono proprio in termini di quali dipendenze sono ammesse. Vale la pena normalizzare un caso concreto. La tabella «ESAME(matricola, cod_corso, nome_studente, nome_corso, voto)» con chiave «(matricola, cod_corso)» è in 1FN (attributi atomici) ma non in 2FN, perché «nome_studente» dipende solo da «matricola» e «nome_corso» solo da «cod_corso»: sono dipendenze parziali dalla chiave composta. Si porta in 2FN scomponendola in «STUDENTE(matricola, nome_studente)», «CORSO(cod_corso, nome_corso)» ed «ESAME(matricola, cod_corso, voto)». Se comparisse un attributo come «dipartimento» dipendente da «nome_corso», a sua volta non chiave, si avrebbe una dipendenza transitiva, da eliminare per la 3FN spostandolo in un'altra tabella. La forma di Boyce-Codd (BCNF) è una versione più severa della 3FN, che richiede che ogni determinante sia una chiave. Attenzione però: normalizzare troppo moltiplica le tabelle e quindi i join, che costano; per questo, in sistemi con moltissime letture, si pratica talvolta una denormalizzazione controllata, reintroducendo consapevolmente una ridondanza per guadagnare in prestazioni — una scelta di ingegneria, non un errore, purché governata e documentata.
Ripasso attivo
Una tabella ESAME(matricola, nome_studente, cod_corso, nome_corso, voto) ha chiave primaria (matricola, cod_corso). Individua le dipendenze parziali e transitive, indica a quale forma normale si trova e scomponila fino alla 3FN.
Richiamo attivo
Ricorda i punti chiave — poi rivela.
Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) — Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM))
Riferimenti e fonti
Ministero dell'Istruzione e del Merito (MIM)