RIPAM 3997

Modello E/R · SQL · Normalizzazione · ACIDv1.0 - 07/07/2026

Database Relazionali

Report 5000 ufficiale: dal file al DBMS, modello relazionale, chiavi e integrità, E/R, normalizzazione 1NF→BCNF, SQL (DDL/DML/DCL), indici e transazioni ACID, NoSQL + 25 numeri chiave + 15 trabocchetti.

1 Dalle basi di dati al DBMS

L'archiviazione dei dati è una delle applicazioni più importanti dei calcolatori. Gli obiettivi di una base dati sono: elevata capacità di archiviazione, recupero e selezione efficiente delle informazioni, integrità fisica e logica, accessibilità da strumenti diversi, protezione da accessi non autorizzati.

Limiti dell'archiviazione su file semplici

  • formato arbitrario non standard, leggibile da altre applicazioni solo se il formato è noto;
  • nessuna gestione nativa dell'accesso concorrente;
  • gli aspetti "fisici" (efficienza, protezione, integrità) ricadono sullo sviluppatore.

Per superarli, dagli anni '70 nascono i DBMS (DataBase Management System). Una base dati gestita da DBMS è:

ProprietàSignificato
Grandeanche oltre la capacità di un singolo disco
Condivisausata da più applicazioni e utenti insieme
Persistentei dati sopravvivono alla singola esecuzione
Affidabilestrumenti di integrità e backup
Sicurariservatezza e controllo degli accessi
Efficienteoperazioni elementari rapide
Standardinterfaccia astratta di alto livello (SQL)
Disaccoppiatala gestione dati è distinta dalla "logica di business"
Accessibile via reteil DBMS può girare su una macchina diversa dall'applicazione

Prodotti DBMS diffusi: Oracle Database, Microsoft SQL Server, IBM DB2, MySQL/MariaDB, PostgreSQL.

Modelli storici di database: gerarchico (ad albero), reticolare, relazionale, relazionale ad oggetti. Lo standard de facto è il modello relazionale (RDBMS, Relational Database Management System).

2 Il modello relazionale

Progettato nei laboratori IBM negli anni '70, è basato sui concetti di relazione (in senso algebrico) e di tabella (rappresentazione intuitiva).

  • Dati gli insiemi A₁…Aₙ, il prodotto cartesiano A₁×…×Aₙ è l'insieme delle n-ple; una relazione è un sottoinsieme del prodotto cartesiano.
  • Le n-ple si trattano come sequenze non ordinate: per distinguere i valori si assegnano nomi, gli attributi. L'insieme dei valori ammessi per un attributo è il suo dominio.
  • Una relazione si rappresenta con una tabella.
Termine formaleTermine tabellare
RelazioneTabella
Tupla / n-plaRiga (record)
AttributoColonna (campo)
DominioTipo di dato ammesso
Gradonumero di colonne (attributi)
Cardinalitànumero di righe (tuple)

3 Chiavi e integrità

  • Chiave primaria (primary key): attributo — o insieme di attributi — che identifica univocamente un record. Non ammette valori duplicati né nulli. Es.: la coppia Matricola + Corso.
  • Chiave candidata: ogni attributo (o combinazione minimale) che potrebbe fungere da chiave primaria.
  • Chiave esterna (foreign key): attributo di una tabella X che correla un suo record con un record di una tabella Y, ripetendo il valore della chiave primaria di Y. È il meccanismo che riduce la ridondanza distribuendo i dati su più tabelle.

Vincoli di integrità

  • Integrità di entità: la chiave primaria non può essere nulla.
  • Integrità referenziale: ogni valore di chiave esterna deve corrispondere a una chiave primaria esistente nella tabella riferita (oppure essere nullo). Impedisce i "riferimenti pendenti".
  • Vincoli di dominio: ogni valore deve appartenere al dominio dell'attributo (not null, check, unique, default).

4 Progettazione: il diagramma Entità/Relazioni (E/R)

Il modello E/R rappresenta le entità e le relazioni tra esse come un grafo, prima di tradurle in tabelle.

  • Entità: rettangolo (oggetto del dominio, es. Studente, Corso).
  • Attributi: proprietà di entità e relazioni (ellissi).
  • Relazioni: rombo che collega le entità, con una cardinalità.
CardinalitàSignificatoTraduzione fisica
1:1a un record di A corrisponde uno e un solo record di Bchiave esterna in una delle due tabelle
1:Ma un record di A corrispondono più record di Bchiave esterna nella tabella "molti"
M:Mmolti a moltitabella di associazione (ponte) con due chiavi esterne

Il modello fisico traduce l'E/R in tabelle collegate da chiavi primarie ed esterne.

5 Normalizzazione

La normalizzazione suddivide i dati su tabelle distinte per ridurre la ridondanza e risolvere le anomalie di aggiornamento, cancellazione e inserimento. Si basa sulle forme normali e sul concetto di dipendenza funzionale A→B (il valore di A determina il valore di B).

Forma normaleRegola
1NF (prima)ogni colonna contiene valori atomici: nessun campo multivalore o ripetuto
2NF (seconda)è in 1NF e, con chiave composta, ogni attributo non-chiave dipende dall'intera chiave (no dipendenze parziali)
3NF (terza)è in 2NF e non esistono dipendenze tra colonne non-chiave (no dipendenze transitive)
Boyce-Codd (BCNF)per ogni dipendenza funzionale A→B, A contiene una chiave della tabella

Anomalie che la normalizzazione elimina

  • di inserimento: impossibile inserire un dato senza averne un altro;
  • di cancellazione: cancellando un record si perdono informazioni non correlate;
  • di aggiornamento: un valore ridondante va modificato in più punti, con rischio di incoerenza.

6 SQL — DDL, DML, DCL

SQL (Structured Query Language) è il linguaggio standard per operare su una base dati relazionale. È dichiarativo (non imperativo/procedurale): manca dei concetti di variabile e di struttura di controllo. Si articola in tre insiemi di istruzioni.

DDL — Data Definition Language (struttura)

create (database, tabelle, indici, viste), alter (modifica struttura), drop (eliminazione). Definire una tabella significa definirne attributi, domini (int, float, char/varchar, date), default e vincoli.

create table corso (
  sigla   char(5)  not null primary key,
  nome    char(20) not null,
  crediti integer  default 6
);

DML — Data Manipulation Language (dati)

insert, select, update, delete.

⚠️ update e delete senza clausola where operano su tutte le righe della tabella.
  • selectselect campi from tabelle where condizione order by ...; il risultato di una select è a sua volta una tabella.
  • Join: selezione su più tabelle correlate da chiavi. Ogni join è prima un prodotto cartesiano, da cui si filtrano le righe che soddisfano la where: è un'operazione onerosa → il database va progettato per minimizzare i join.
  • Operazioni di gruppo: group by con funzioni di aggregazione (sum, avg, count, min, max).
  • Operatore like con carattere jolly % per confronti parziali.

DCL — Data Control Language (permessi)

grant (assegna un permesso a un utente), revoke (lo revoca).

7 Indici, transazioni e proprietà ACID

Indici — struttura dati (spesso ad albero, es. B-tree) costruita sui valori di una colonna per velocizzare le ricerche: senza indice si esegue un full table scan (tempo lineare, O(n)); con indice il tempo diventa logaritmico (O(log n)). Dopo molte modifiche l'indice si sbilancia → conviene eliminarlo e ricrearlo. Gli indici accelerano le letture ma rallentano insert/update/delete.

Transazione — raccoglie una serie di operazioni ed esegue effettivamente le modifiche solo al termine (commit); in caso di errore annulla tutto (rollback).

Proprietà ACID (garanzie di una transazione)

LetteraProprietàSignificato
AAtomicitàla transazione è indivisibile: o tutte le operazioni o nessuna
CConsistenzail database passa da uno stato valido a un altro stato valido (vincoli rispettati)
IIsolamentotransazioni concorrenti non si interferiscono (come se fossero seriali)
DDurabilitàdopo il commit le modifiche sono permanenti, anche in caso di crash

8 Oltre il relazionale: NoSQL e ORM

Il modello relazionale ha limiti con moli enormi di dati o dati difficili da strutturare a priori. I database NoSQL (Not Only SQL) usano modelli alternativi:

Tipo NoSQLStrutturaEsempio
Document-orientedrecord = "documento" JSON/XML a campi variabiliMongoDB, Apache Solr
Graphdati come grafo (vertici e archi)Neo4j
Key-valuearray associativi / dizionariRedis, BigTable, Berkeley DB
Object-orientedmodello ad oggetti integrato col relazionale

ORM (Object-Relational Mapping): con i linguaggi object-oriented mappa le classi del programma sulle entità del database, evitando SQL scritto a mano. Hibernate è il middleware ORM open source per Java (NHibernate per .NET). Si colloca come middleware tra applicazione e dati.

9 25 numeri e fatti chiave

#DatoValore
1Nascita del modello relazionaleanni '70 (IBM)
2Grado di una tabellanumero di colonne/attributi
3Cardinalità di una tabellanumero di righe/tuple
4Forme normali principali1NF, 2NF, 3NF, BCNF
5Regola 1NFvalori atomici (no campi multivalore)
6Regola 2NFno dipendenze parziali dalla chiave
7Regola 3NFno dipendenze transitive
8Regola BCNFogni determinante è una chiave
9Chiave primariaidentifica univocamente il record
10Chiave esternacorrela due tabelle (riduce ridondanza)
11Integrità di entitàPK non nulla
12Integrità referenzialeFK punta a PK esistente
13Sottolinguaggi SQLDDL, DML, DCL
14Istruzioni DDLcreate, alter, drop
15Istruzioni DMLinsert, select, update, delete
16Istruzioni DCLgrant, revoke
17Natura di SQLdichiarativo (non procedurale)
18Risultato di una SELECTuna tabella
19Base di un joinprodotto cartesiano + filtro
20Ricerca senza indiceO(n) — full table scan
21Ricerca con indiceO(log n)
22Fine transazionecommit (successo) / rollback (errore)
23Proprietà ACIDAtomicità, Consistenza, Isolamento, Durabilità
24NoSQLdocument, graph, key-value, object
25ORM per JavaHibernate

10 15 trabocchetti d'esame

#TrabocchettoRisposta corretta
1"Il grado è il numero di righe"FALSO — il grado è il numero di colonne; le righe sono la cardinalità
2"La chiave primaria può essere nulla"FALSO — integrità di entità: la PK non può essere nulla
3"La foreign key aumenta la ridondanza"FALSO — la riduce, distribuendo i dati su più tabelle
4"SQL è un linguaggio procedurale"FALSO — è dichiarativo, senza variabili né controllo di flusso
5"1NF ammette campi con più valori"FALSO — 1NF richiede valori atomici
6"DELETE senza WHERE cancella una riga"FALSO — le cancella tutte
7"GRANT è un'istruzione DML"FALSO — è DCL (controllo permessi)
8"CREATE TABLE è DML"FALSO — è DDL (definizione struttura)
9"Un indice velocizza anche gli inserimenti"FALSO — velocizza le letture, rallenta le scritture
10"Con indice la ricerca è O(n)"FALSO — è O(log n); O(n) è senza indice
11"Commit annulla la transazione"FALSO — commit conferma; rollback annulla
12"La 'D' di ACID è Disponibilità"FALSO — è Durabilità
13"Una relazione M:M si traduce con una sola FK"FALSO — serve una tabella di associazione con due FK
14"MongoDB è un database relazionale"FALSO — è NoSQL document-oriented
15"3NF elimina le dipendenze parziali"FALSO — quelle le elimina la 2NF; la 3NF elimina le transitive