MORENO SARDELLA · RIPASSONE
Guida di sopravvivenza · Esame di Stato

RIPASSONE SALVA 🍑

Orale di Maturità — Informatica

Prima parte: come si svolge e come viene valutato il colloquio, con i documenti ufficiali del MIM alla mano. Seconda parte: tutto il programma di Informatica della V — database, SQL e PHP — con schemi, diagrammi E-R e tabelle, perché certe cose si capiscono solo vedendole.

Colloquio · 20 punti DM n. 13/2026 Modello E-R Algebra relazionale SQL PHP & MySQL
01
Da chi c'è già passato

Prima di entrare

La preparazione tecnica ce l'hai (e nel resto della pagina la ripassi). Ma all'orale conta tanto come ti presenti: la griglia valuta anche autonomia, maturità e padronanza espositiva. Ecco i consigli concreti, quelli che avresti voluto sentirti dire prima.

la sera prima

Dormi, non studiare all'alba

Niente maratone notturne: la lucidità vale più dell'ultimo dettaglio ripassato. Dormi 7-8 ore, prepara i vestiti e i documenti la sera prima, e la mattina fai solo un ripasso leggero.

look

Ordinato, non in maschera

Vestiti in modo pulito e comodo, né troppo formale né troppo sciatto. Evita strappi vistosi, scollature marcate, shorts, ciabatte e trucco pesante. Devi sentirti te stesso, ma "in versione presentabile".

corpo

Postura aperta

Siediti dritto, spalle rilassate, mani ferme sul tavolo. Guarda negli occhi chi ti parla (alterna tra i commissari). Un bel respiro prima di iniziare abbassa l'ansia più di quanto pensi.

voce

Lento e chiaro

Parla più piano di quanto ti venga d'istinto: l'ansia accelera. Fai pause. Meglio poche frasi precise che un fiume di parole. Se ti perdi, fermati, respira, riparti.

registro

Lessico tecnico, dai del Lei

Usa i termini giusti (relazione, chiave esterna, transazione) con naturalezza: è l'indicatore 2 della griglia. Evita gli intercalari ("cioè", "tipo", "in pratica") e il "non lo so" secco.

testa

Guida tu il discorso

Apri con un argomento forte e portalo dove sei preparato. Se non sai una cosa, dillo con onestà e sposta su un tema vicino che padroneggi: dimostra maturità, non te lo segnano come gli altri.

Prenditi due secondi. Quando arriva una domanda, va benissimo dire "mi lasci pensare un attimo". Un secondo di silenzio ragionato vale più di una risposta sparata a caso.
Niente scena muta. Dal 2026 non sostenere il colloquio "in modo regolare" significa non diplomarsi: presentati e parla, qualunque cosa accada. Tanto, se sei arrivato qui, il più è fatto.
02
Le regole del gioco

Come si svolge l'orale

Il colloquio dell'anno scolastico 2025/2026 è disciplinato dal Decreto del Ministro dell'istruzione e del merito 29 gennaio 2026, n. 13 e dal suo Allegato A (la griglia di valutazione). Sono i due documenti qui sotto: leggili almeno una volta, perché definiscono esattamente cosa ti verrà chiesto e come verrai valutato.

DM 29 gennaio 2026, n. 13
Modalità del colloquio
Apri ↗
Allegato A
Griglia di valutazione del colloquio
Apri ↗
Se i PDF non si vedono: tieni questo file index.html nella stessa cartella dei due PDF, oppure aprili con i pulsanti Apri ↗.

Articolo 1 — le quattro discipline del colloquio

L'art. 1 stabilisce quali materie saranno protagoniste del tuo orale. Le elenca in una tabella allegata al decreto, distinta per indirizzo.

DM n. 13/2026 · Art. 1, comma 1

«Per l'esame di maturità dell'anno scolastico 2025/2026, nelle tabelle allegate […] sono indicate: […] b) le quattro discipline oggetto del colloquio d'esame […]».

In pratica: il colloquio non spazia a caso su tutto, ma ruota intorno a quattro discipline individuate. Per una V di ITI ad articolazione Informatica gravitano naturalmente su Informatica e Sistemi e reti sul fronte tecnico, con Italiano e Inglese a completare il quadro pluridisciplinare. È su questo asse che devi preparare i collegamenti.

Articolo 2 — come si svolge

L'art. 2 è il cuore della faccenda: dice qual è lo scopo del colloquio e in che ordine procede. Lo scopo è accertare il PECUP (Profilo Educativo, Culturale e Professionale), cioè non solo cosa sai, ma come lo sai usare e collegare.

DM n. 13/2026 · Art. 2, comma 1

«Il colloquio […] ha la finalità di accertare il conseguimento del profilo educativo, culturale e professionale della studentessa o dello studente (PECUP) […] al fine di verificare l'acquisizione dei contenuti e dei metodi propri di ciascuna disciplina, la capacità di utilizzare e raccordare le conoscenze acquisite e di argomentare in modo critico e personale […]».

Il comma 2 fissa la sequenza delle fasi. È la mappa del tuo orale:

DM n. 13/2026 · Art. 2, comma 2

«Il colloquio ha inizio con una breve riflessione del candidato sul proprio percorso scolastico e personale […]. Il colloquio prosegue con la proposta di domande e approfondimenti sulle quattro discipline […]. Nel corso del colloquio il candidato analizza criticamente e correla al percorso di studi […] le esperienze svolte nell'ambito delle attività di formazione scuola-lavoro […]. Inoltre, il colloquio verifica le competenze di educazione civica […]. Infine […] viene effettuata la discussione degli elaborati relativi alle prove scritte.»

FASE 1 · l'avvio
Breve riflessione sul tuo percorso scolastico e personale
Apri tu. 60-90 secondi che raccontano chi sei e dove vuoi andare, chiudendo su un aggancio tecnico forte: così porti il discorso dove sei più preparato. La commissione può tenere conto del tuo Curriculum dello studente.
FASE 2 · il colloquio pluridisciplinare
Domande e approfondimenti sulle quattro discipline
Novità 2026: niente più spunto o materiale a sorpresa scelto dalla commissione. Si va dritti alle quattro discipline con domande e approfondimenti, valutando soprattutto il ragionamento. Il grosso di questo ripasso serve qui.
FASE 3 · il PCTO
Analisi critica dell'esperienza di formazione scuola-lavoro
Esponi il PCTO con una breve relazione o un elaborato multimediale, correlandolo al percorso e al PECUP: cosa hai fatto, quali competenze hai messo in gioco, cosa hai imparato.
FASE 4 · educazione civica
Verifica delle competenze di educazione civica
Per un informatico i ponti naturali sono privacy/GDPR, sicurezza dei dati, cittadinanza digitale. Si agganciano benissimo a DBMS e SQL injection (Tema PHP).
FASE 5 · le prove scritte
Discussione degli elaborati delle prove scritte
Si rivedono i tuoi compiti: preparati a commentare scelte ed eventuali errori della prima e seconda prova.
Comma 8 — i collegamenti: con la riforma 2026 i collegamenti interdisciplinari non sono più obbligatori (addio ai "percorsi" forzati): la prova è più verticale, centrata sulle quattro discipline e sul ragionamento. Restano un elemento facoltativo che puoi proporre per arricchire il discorso, e la griglia premia comunque la capacità di «utilizzare e raccordare le conoscenze» (indicatore 2). Quindi: un raccordo spontaneo e solido aiuta; uno forzato no.
03
Allegato A · come ti misurano

Come viene valutato

La commissione ha a disposizione venti punti per il colloquio, attribuiti dall'intera commissione, presidente compreso. Il punteggio nasce da quattro indicatori, ognuno con cinque livelli e un massimo di 5 punti: 4 × 5 = 20.

DM n. 13/2026 · Art. 2, comma 7

«La commissione dispone di venti punti per la valutazione del colloquio. […] Il punteggio è attribuito dall'intera commissione, compreso il presidente.»

Questi sono i quattro indicatori dell'Allegato A, con il descrittore del livello più alto (V, eccellenza): è il bersaglio a cui puntare.

IndicatoreCosa valutaLivello V — eccellenzaMax
1. Contenuti e metodi Quanto padroneggi gli argomenti e i metodi delle quattro discipline «Ha acquisito i contenuti delle diverse discipline in maniera completa e approfondita e utilizza con piena padronanza i relativi metodi.» 5
2. Raccordo e lessico Capacità di collegare le conoscenze; padronanza del lessico, anche tecnico/di settore (eventualmente in inglese) «È in grado di utilizzare le conoscenze acquisite raccordandole in una trattazione pluridisciplinare ampia e approfondita. Si esprime con ricchezza e piena padronanza lessicale e semantica […].» 5
3. Argomentazione critica Capacità di argomentare in modo critico e personale «È in grado di formulare ampie e articolate argomentazioni critiche e personali, rielaborando con originalità i contenuti acquisiti.» 5
4. Maturazione personale Grado di autonomia, responsabilità e maturità raggiunto «Ha raggiunto un elevato grado di autonomia e maturazione personale; sa gestire responsabilità significative in modo esemplare per gli altri.» 5
Punteggio totale della prova orale20
indicatore 1

Sappi i metodi

Non basta "cosa è": mostra come si fa. Es. non solo "cos'è una transazione", ma come si delimita e cosa garantisce ACID.

indicatore 2

Collega & nomina giusto

Usa il lessico esatto (relazione ≠ tabella ≠ campo) e tieni pronta una frase tecnica in inglese per l'esterno di lingua.

indicatore 3

Prendi posizione

"md5 è superato, oggi userei password_hash perché…": un'opinione motivata vale più di un elenco.

indicatore 4

Mostrati autonomo

Guida tu il discorso, ammetti con lucidità ciò che non sai e riporta il discorso dove sei sicuro.

04
Tema 1 · le basi

Sistemi informativi & DBMS

È spesso la domanda d'apertura. Parti distinguendo dato e informazione: il dato è un fatto grezzo (37, "Rossi"), l'informazione è il dato interpretato in un contesto ("il paziente Rossi ha 37 anni").

Che cos'è un DBMS

Un DBMS (Data Base Management System) è il software che gestisce una base di dati: la definisce, la interroga e la modifica garantendo persistenza, condivisione, integrità e sicurezza.

Vantaggi

  • Niente ridondanze e incongruenze
  • Condivisione e accesso concorrente
  • Indipendenza dei dati dalle applicazioni
  • Integrità, sicurezza, controllo accessi

Svantaggi

  • Costo di software e hardware
  • Complessità e necessità di un DBA
  • Vulnerabilità del punto centralizzato

Architettura a tre livelli (ANSI/SPARC)

È il modello che spiega l'indipendenza dei dati. Citalo: fa scena e si capisce dal disegno.

Livello esterno viste dei singoli utenti / applicazioni Livello logico struttura globale dei dati (lo schema) Livello interno memorizzazione fisica su disco indip.logica indip.fisica
Cambiare un livello senza toccare quello sopra = indipendenza fisica (interno↔logico) e logica (logico↔esterno).

Linguaggi e ciclo di vita

05
Tema 2 · progettazione concettuale

Il modello Entità-Relazioni

Primo passo della progettazione: descrivere la realtà senza pensare a come la implementeremo. Devi saper riconoscere e disegnare i costrutti. Ecco la legenda:

ENTITÀ classe di oggetti ASSOC. legame logico attributo proprietà chiave
Rettangolo = entità · rombo = associazione · ellisse = attributo · ellisse sottolineata = identificatore.

Un esempio completo: la biblioteca

Realtà: una biblioteca presta libri ai suoi iscritti. Ogni utente fa più prestiti; ogni prestito riguarda un solo libro; un libro può comparire in molti prestiti.

tessera isbn data_inizio UTENTE PRESTITO LIBRO effettua riguarda (1,N) (1,1) (1,1) (0,N)
PRESTITO "spezza" l'associazione N:N tra Utente e Libro: ricordatelo, è la chiave della traduzione del Tema 3.

Le cardinalità delle associazioni

Quante istanze di un'entità si legano all'altra. I tre casi che devi saper riconoscere a colpo d'occhio:

1 : 1 persona ↔ carta d'identità 1 : N cliente → ordini N : N studenti ↔ corsi
Gli attributi possono essere semplici, composti (indirizzo = via+cap+città) o multivalore (più telefoni).
Metodo all'orale: se ti danno una realtà da modellare, ragiona ad alta voce: i sostantivi → entità, i verbi → associazioni, le proprietà → attributi, poi scegli identificatori e cardinalità. I prof premiano il metodo.
Q> Differenza tra identificatore interno ed esterno?

Interno: l'entità si identifica con propri attributi (es. matricola). Esterno: serve anche la chiave di un'altra entità tramite un'associazione (entità debole).

Q> Cos'è una gerarchia ISA?

Una generalizzazione: un'entità padre (Persona) si specializza in figlie (Studente, Docente). Si classifica in totale/parziale ed esclusiva/sovrapposta.

06
Tema 3 · progettazione logica

Relazionale, algebra, transazioni, normalizzazione

Il tema più denso: qui lo schema E-R diventa tabelle. Lessico preciso, mi raccomando.

Algebra relazionale — gli insiemi

Linguaggio formale di E. Codd: applica operatori alle tabelle e restituisce tabelle. Gli operatori insiemistici si vedono benissimo con i diagrammi di Eulero-Venn (R e S sono due tabelle compatibili):

R ∪ S — Unione tutte le righe di R e/o S R ∩ S — Intersezione solo le righe comuni R − S — Differenza righe di R che non sono in S R S
I 6 operatori primitivi: selezione σ, proiezione π, ridenominazione ρ, unione ∪, differenza −, prodotto cartesiano ×. Derivati: intersezione ∩, join ⋈, divisione ÷.

Selezione σ vs proiezione π

Due operatori che confondono tutti. Visivamente è semplicissimo: la selezione prende righe, la proiezione prende colonne.

σ — Selezione (righe) riga che soddisfa la condizione π — Proiezione (colonne) colonna scelta
In SQL: la WHERE è la selezione σ, l'elenco di campi dopo SELECT è la proiezione π.

Le transazioni e le proprietà ACID

Una transazione è un'unità logica di elaborazione che il DBMS tratta come indivisibile: si delimita tra BOT ed EOT e si chiude con COMMIT o ROLLBACK. Esempio classico: il bonifico (addebito + accredito: entrambi o nessuno).

end commit abort rollback ACTIVE PARTIALLY COMM. COMMITTED FAILED ABORTED
Gli stati di una transazione: o arriva al COMMIT, o fallisce e viene annullata (rollback → ABORTED).
A

Atomicità

Tutto o niente: se un'operazione fallisce si annulla tutto.

C

Consistenza

Da uno stato coerente a un altro coerente (vincoli rispettati).

I

Isolamento

Le transazioni concorrenti non si interferiscono.

D

Durabilità

Dopo il commit le modifiche sono permanenti, anche dopo un guasto.

Normalizzazione — l'esempio Incarichi

Serve a togliere ridondanze e anomalie. Si basa sulle dipendenze funzionali (X → Y: il valore di X determina Y). Partiamo da una tabella unica:

// Incarichi — non normalizzata
impiegatoprogettoruolocosto_orariolivellobudget
RossiAlfatecnico25B50000
BianchiBetaprogettista40C80000
NeriDeltaresponsabile55D90000

Le dipendenze: impiegato→livello, progetto→budget, (impiegato,progetto)→ruolo, ruolo→costo_orario. Scomponiamo:

Incarichi(imp, prog, ruolo, costo, livello, budget) 1NF 2NF + 3NF Impiegati(imp, livello) Progetti(prog, budget, anno) Ruoli(ruolo, costo) Incarichi(imp, prog, ruolo) ⋯ le frecce tratteggiate = chiavi esterne (FK)
1NF: attributi atomici + PK. 2NF: niente dipendenze parziali (budget/livello scorporati). 3NF: niente dipendenze transitive (costo_orario→ruolo scorporato).

I passi della progettazione logica

Ristrutturazione dello schema E-R

Eliminazione delle gerarchie, eliminazione degli attributi multivalore, scelta degli identificatori principali.

Traduzione in tabelle

Ogni entità → tabella con PK. Associazione 1:N → la PK del lato "1" diventa FK nel lato "N". Associazione N:N → tabella nuova con le due PK (es. Prestito). Associazione 1:1 → fusione o FK con UNIQUE.

Q> Perché una tabella in 2NF può non essere in 3NF?

Può avere dipendenze transitive: un attributo non chiave che dipende da un altro attributo non chiave (es. costo_orario → ruolo, e ruolo non è chiave).

Q> Cosa garantisce la "I" di ACID?

L'isolamento: transazioni concorrenti eseguite come se fossero in sequenza, senza vedere gli stati intermedi le une delle altre.

07
Tema 4 · progettazione fisica

Il linguaggio SQL

La parte più pratica: quasi sicuro ti chiederanno di leggere o scrivere una query. Lavoriamo su due tabelle in relazione 1:N — un paziente fa molte visite.

PAZIENTI 🔑 ID_paziente (PK) cognome provincia VISITE 🔑 ID_visita (PK) id_paziente (FK) pressioneMAX data 1 N
La FK id_paziente in Visite riferisce la PK ID_paziente in Pazienti: è il legame che il JOIN ricostruisce.

DDL — creare le tabelle

SQL — DDL
CREATE TABLE Pazienti (
  ID_paziente INT PRIMARY KEY AUTO_INCREMENT,
  cognome     VARCHAR(40) NOT NULL,
  provincia   CHAR(2)
);

CREATE TABLE Visite (
  ID_visita    INT PRIMARY KEY AUTO_INCREMENT,
  id_paziente  INT NOT NULL,
  pressioneMAX INT,
  FOREIGN KEY (id_paziente) REFERENCES Pazienti(ID_paziente)
);

DML & QL — manipolare e interrogare

SQL — DML
INSERT INTO Pazienti (cognome, provincia) VALUES ('Rossi', 'MI');
UPDATE Pazienti SET provincia = 'CO' WHERE ID_paziente = 1;
DELETE FROM Visite WHERE pressioneMAX IS NULL;

La SELECT ha tre parti: target list (cosa = proiezione π), FROM (da dove), WHERE (condizione = selezione σ).

SQL — SELECT con operatori
-- proiezione + selezione
SELECT cognome, provincia
FROM Pazienti
WHERE provincia IN ('MI','TO','CO')
  AND cognome LIKE 'R%';   -- inizia per R

Operatori della WHERE: = <> < > <= >=, più LIKE (jolly % e _), BETWEEN, IN, IS NULL, uniti da AND/OR/NOT.

JOIN, aggregazione e raggruppamento

SQL — JOIN + GROUP BY
-- quante visite e pressione media per ciascun paziente
SELECT P.cognome,
       COUNT(*)            AS n_visite,
       AVG(V.pressioneMAX) AS media
FROM Pazienti P
JOIN Visite V ON P.ID_paziente = V.id_paziente
GROUP BY P.cognome
HAVING COUNT(*) > 1
ORDER BY media DESC;

INNER JOIN

solo le coppie
  • Restituisce solo le righe con corrispondenza tra le due tabelle.

LEFT OUTER JOIN

tutto il lato sinistro
  • Tiene tutte le righe di sinistra; dove manca corrispondenza, i campi destri sono NULL.
Ordine logico di esecuzione: FROM/JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY. Spiega da solo metà delle domande. WHERE filtra le righe prima, HAVING filtra i gruppi dopo.
Q> Quali operatori dell'algebra realizza la SELECT?

WHERE = selezione (σ), elenco campi = proiezione (π), JOIN = congiunzione (⋈).

Q> Errore tipico con GROUP BY?

Mettere nella SELECT un campo non aggregato e assente dal GROUP BY. Regola: ogni colonna o è aggregata o compare nel GROUP BY.

08
Tema 5 · lato server

Pagine dinamiche PHP & MySQL

Qui le materie si incrociano: PHP (Informatica) + client/server (Sistemi) + sicurezza (Ed. civica). Ottimo terreno per i collegamenti dell'orale.

BROWSER client SERVER WEB Apache + PHP esegue lo script lato server MySQL richiesta HTTP → ← HTML pronto query SQL → ← dati
Il PHP gira sul server: al browser arriva solo HTML. Il codice e il database non vengono mai esposti al client.

Connessione al DB con mysqli

PHP — lettura dati da MySQL
$con = new mysqli("localhost", "root", "", "ospedale");
if (mysqli_connect_errno()) { echo "Errore di connessione"; exit(); }

$sql = "SELECT cognome, provincia FROM Pazienti WHERE provincia = 'MI'";
$ris = $con->query($sql);

if ($ris->num_rows > 0) {
  foreach ($ris as $riga) {            // array associativo
    echo $riga['cognome'] . " - " . $riga['provincia'];
  }
}
$con->close();

Per scrivere cambia solo la stringa SQL (INSERT/UPDATE/DELETE): è il CRUD del progetto di laboratorio. $_GET/$_POST leggono i form; session_start() + $_SESSION gestiscono il login; i cookie salvano dati sul client, le sessioni sul server.

Password: crypt vs hash

SQL injection — il ponte con Ed. civica

Attacco in cui l'utente inserisce codice SQL in un campo di input: se la query si costruisce concatenando l'input, il codice ostile viene eseguito.

PHP — vulnerabile vs sicuro
// VULNERABILE: input concatenato
$sql = "SELECT * FROM utenti WHERE nome = '" . $_POST['nome'] . "'";
// se l'utente scrive   ' OR '1'='1   la condizione è sempre vera!

// SICURO: prepared statement (dati e query separati)
$stmt = $con->prepare("SELECT * FROM utenti WHERE nome = ?");
$stmt->bind_param("s", $_POST['nome']);
$stmt->execute();
Difese: validazione/sanitizzazione dell'input, escaping (real_escape_string) e soprattutto prepared statement. Collegamento d'oro: SQL injection + password hashate → tutela dei dati personali → GDPR (educazione civica).
Q> Il PHP gira sul client o sul server?

Sul server: al browser arriva solo l'HTML prodotto. Per questo accede al database senza esporlo.

Q> Differenza sessione / cookie?

Il cookie salva i dati sul client; la sessione li salva sul server e sul client lascia solo l'ID di sessione (più sicura per il login).

09
Allenamento · seconda prova A038

DOMANDONI II prova da cui trarre spunto

?

I quesiti della SECONDA PARTE delle tracce ministeriali di Informatica (A038) degli ultimi anni, con una risposta-traccia per ciascuno. Non sono soluzioni complete: sono spunti per allenare il ragionamento, perché gli stessi temi tornano spesso (HTTP stateless, JSON/XML, normalizzazione, trigger, GRANT, concorrenza…). Tocca i pulsanti per aprire.

Ordinaria 2023

a.s. 2022/2023

— piattaforma di educational games
Traccia A038 · Ordinaria 2023
Seconda prova — testo ministeriale
Apri ↗
I. Pagine web per la classifica generale degli studenti di una classe virtuale (somma delle monete su tutti i giochi della classe).

È un problema di raggruppamento: somma le monete di ogni studente su tutti i giochi di quella classe e ordina in modo decrescente. Lato server (PHP) esegui la query e stampi una tabella.

SELECT s.nome, SUM(r.monete) AS totale FROM Studenti s JOIN Raccolte r ON s.id = r.id_studente JOIN Giochi g ON r.id_gioco = g.id WHERE g.id_classe = :classe GROUP BY s.id ORDER BY totale DESC;
II. Integrare la base di dati per i feedback degli studenti sui videogiochi (punteggio 1-5 + descrizione max 160 caratteri).

Nuova tabella collegata a studente e gioco, con vincoli di dominio sul punteggio e sulla lunghezza della descrizione. La pagina è un form (select 1-5 + textarea con maxlength="160") che fa una INSERT; per mostrare il voto medio usi AVG.

CREATE TABLE Feedback ( id INT PRIMARY KEY AUTO_INCREMENT, id_studente INT, id_gioco INT, punteggio INT CHECK (punteggio BETWEEN 1 AND 5), descrizione VARCHAR(160), FOREIGN KEY (id_studente) REFERENCES Studenti(id), FOREIGN KEY (id_gioco) REFERENCES Giochi(id) );
III. Concetto di "raggruppamento" in SQL: come operano le funzioni di aggregazione e la clausola HAVING.

GROUP BY riunisce in un'unica riga tutte le tuple che hanno lo stesso valore in una colonna; su ogni gruppo le funzioni di aggregazione (COUNT, SUM, AVG, MIN, MAX) calcolano un valore. La WHERE filtra le righe prima del raggruppamento, la HAVING filtra i gruppi dopo e può usare le aggregazioni.

-- argomenti con almeno 3 giochi SELECT argomento, COUNT(*) AS n FROM Giochi GROUP BY argomento HAVING COUNT(*) >= 3;
IV. Tabella Progetti(ID, Titolo, Budget, Tipo, DataInizio, DataFine, Tutor, TelTutor): verificare la normalizzazione, portarla in 3NF e implementarla.

Non è in 3NF: TelTutor dipende da Tutor, non dalla chiave (dipendenza transitiva ID → Tutor → TelTutor). Si scorpora il tutor in una tabella a parte.

CREATE TABLE Tutor ( idTutor INT PRIMARY KEY, nome VARCHAR(50), telefono VARCHAR(15) ); CREATE TABLE Progetti ( ID INT PRIMARY KEY, titolo VARCHAR(80), budget DECIMAL(10,2), tipo VARCHAR(20), dataInizio DATE, dataFine DATE, idTutor INT, FOREIGN KEY (idTutor) REFERENCES Tutor(idTutor) );
Suppletiva 2023

a.s. 2022/2023

— SportOvunque, palestre in convenzione
Traccia A038 · Suppletiva 2023
Seconda prova — testo ministeriale
Apri ↗
I. Disdetta di una prenotazione fino a 48 ore prima, con credito pari al costo riutilizzabile.

Aggiungi uno stato alla prenotazione ('attiva'/'disdetta') e un saldo credito all'abbonato (o una tabella Crediti). Lato server, alla disdetta verifichi che manchino almeno 48h (confronto tra data attività e NOW()), aggiorni lo stato e accrediti il costo. In pagina mostri il bottone "Disdici" solo quando la condizione è rispettata.

ALTER TABLE Prenotazioni ADD stato VARCHAR(10) DEFAULT 'attiva'; ALTER TABLE Abbonati ADD credito DECIMAL(8,2) DEFAULT 0;
II. Pagina con l'elenco testuale delle palestre di una città; in alternativa, su mappa geografica con geolocalizzazione.

Versione testo: SELECT * FROM Palestre WHERE citta = ? e stampi l'elenco. Versione mappa: hai già le coordinate (lat, lng) in tabella; le passi a una libreria di mappe (es. Leaflet o Google Maps) come marker, tipicamente serializzando i dati in JSON e disegnandoli via JavaScript lato client.

III. Differenze tra i predicati ANY, ALL ed EXISTS (con esempi).

ANY: vero se la condizione vale per almeno un valore della sottoquery — > ANY significa "maggiore del minimo". ALL: vero se vale per tutti — > ALL significa "maggiore del massimo". EXISTS: vero se la sottoquery (correlata) restituisce almeno una riga.

-- attività più care della meno cara in città WHERE prezzo > ANY (SELECT prezzo FROM Attivita WHERE citta='Roma') -- palestre che hanno almeno una prenotazione WHERE EXISTS (SELECT 1 FROM Prenotazioni p WHERE p.id_pal = Palestre.id)
IV. Tabella atleti (…, Società Sportiva, TelSquadra, Allenatore, TelAllenatore): verificare e portare in 3NF.

Non è in 3NF: TelSquadra e i dati dell'allenatore dipendono dalla Società/Allenatore, non dall'atleta (dipendenze transitive). Si scorpora in più tabelle.

Atleti(idAtleta, nome, cognome, dataNascita, cittaNascita, idSocieta*) Societa(idSocieta, nome, telSquadra, idAllenatore*) Allenatori(idAllenatore, nome, telefono)
Straordinaria 2023

a.s. 2022/2023

— banca dati dei mieli italiani / apiari
Traccia A038 · Straordinaria 2023
Seconda prova — testo ministeriale
Apri ↗
I. Pagina dinamica per l'elenco degli apiari di una regione, selezionata da una mappa grafica dell'Italia.

Disegni l'Italia come SVG con ogni regione in un <path> cliccabile; al click invii il nome della regione (link/AJAX) al server, che esegue SELECT * FROM Apiari WHERE regione = ? e restituisce l'elenco. È un mix client (mappa interattiva) + server (query parametrica).

II. Pagina che mostra l'elenco della query 4a (apicoltori che producono DOP in una regione) aggiungendo link al sito e mail.

Prevedi in Apicoltori i campi sito_web ed email. Query con JOIN apicoltori-apiari-miele filtrando per tipologia DOP e regione; in PHP stampi nome, <a href="mailto:…"> e <a href="…"> al sito.

SELECT DISTINCT a.nome, a.email, a.sito_web FROM Apicoltori a JOIN Apiari ap ON a.id=ap.id_apicoltore JOIN Mieli m ON ap.id_miele=m.id WHERE m.tipologia='DOP' AND ap.regione = ?;
III. HTTP è "stateless": modalità di propagazione dei dati fra pagine successive per garantire la persistenza.

Poiché HTTP non ricorda nulla tra una richiesta e l'altra, si usano: parametri GET (querystring), campi hidden nei form POST, cookie (lato client), sessioni (lato server, con il session-id salvato in un cookie) e, per i dati che devono restare nel tempo, il database. Per tenere l'utente loggato si usano le sessioni.

IV. Progetti(id, titolo, budget, data_inizio, data_fine) e Docenti(id, …): a) aggiungere a Progetti il docente responsabile; b) rinominare "posta_elettronica" in "e-mail".
-- a) chiave esterna verso il docente responsabile ALTER TABLE Progetti ADD id_docente INT; ALTER TABLE Progetti ADD FOREIGN KEY (id_docente) REFERENCES Docenti(id); -- b) rinomina campo (MySQL) ALTER TABLE Docenti CHANGE posta_elettronica email VARCHAR(100);
Ordinaria 2025

a.s. 2024/2025

— labeling di un dataset contro le fake news
Traccia A038 · Ordinaria 2025
Seconda prova — testo ministeriale
Apri ↗
I. Monitorare le due fasi: tracciare le news etichettate al giorno da ciascun esperto e il tempo complessivo di ciascun gruppo.

Ogni etichettatura deve registrare id_esperto e un timestamp. Conteggio giornaliero per esperto: GROUP BY id_esperto, DATE(istante). Tempo complessivo di un gruppo: differenza tra MIN e MAX del timestamp delle etichettature di quel gruppo.

II. Tenere traccia dei cambiamenti fatti dai senior rispetto alle etichette dei junior.

Si storicizza: una tabella Etichettature con il campo fase ('junior'/'senior'), valore, motivazione, id_esperto e data — oppure una tabella di log che, a ogni modifica, salva valore precedente e nuovo. Così confronti la classificazione provvisoria con quella validata.

III. Autenticazione a due fattori: struttura della tabella utenti e passaggi del codice lato server.

Tabella: Utenti(id, username, password_hash, secret_2fa, telefono/email). Passaggi lato server: 1) verifica username + password con password_verify; 2) se ok, genera/invia un codice OTP (via email/SMS, o un TOTP basato sul secret); 3) l'utente inserisce il codice; 4) il server lo valida entro la finestra temporale; 5) solo allora apre la sessione autenticata.

IV. Accesso condiviso e contemporaneo: problematiche su integrità e consistenza e soluzioni per prevenirle.

Con più utenti in concorrenza si rischiano lost update, dirty read, letture non ripetibili e phantom. Si prevengono con le transazioni (proprietà ACID), i lock e i livelli di isolamento gestiti dal DBMS: è esattamente il tema delle transazioni del Tema 3.

Suppletiva 2025

a.s. 2024/2025

— piattaforma di sponsorizzazioni con comunicatori
Traccia A038 · Suppletiva 2025
Seconda prova — testo ministeriale
Apri ↗
I. Registrare le visualizzazioni giornaliere di una sponsorizzazione e visualizzarne le statistiche.

Tabella con una riga per giorno: Statistiche(id_sponsor*, data, visualizzazioni), chiave (id_sponsor, data). La pagina interroga le righe della sponsorizzazione e disegna l'andamento (tabella o grafico con Chart.js).

SELECT data, visualizzazioni FROM Statistiche WHERE id_sponsor = ? ORDER BY data;
II. Gestire i feedback di aziende e comunicatori (punteggio 1-5 + descrizione max 160).

Tabella Feedback(id, id_sponsor*, autore, punteggio CHECK 1-5, descrizione VARCHAR(160)) con autore per distinguere azienda/comunicatore. La pagina è un form (select 1-5 + textarea maxlength 160) che esegue una INSERT.

III. XML e JSON: modalità di utilizzo di uno dei due, con esempi.

Scelgo JSON: formato leggero per lo scambio di dati tra client e server (chiamate fetch/AJAX, API REST), nativo in JavaScript. XML è più verboso, con tag annidati e validabile via DTD/XSD, usato per documenti strutturati e SOAP.

// JSON { "nome": "Mario", "tipologia": "influencer" } <!-- XML --> <comunicatore><nome>Mario</nome></comunicatore>
IV. Tabella Articoli con aggiornamenti periodici sui prezzi: tracciare automaticamente la cronologia su una tabella a parte.

Si usa un TRIGGER. Una tabella di storico registra prezzo vecchio, nuovo e data; il trigger AFTER UPDATE su Articoli vi inserisce i valori OLD/NEW a ogni modifica, popolando la cronologia da solo.

CREATE TRIGGER log_prezzo AFTER UPDATE ON Articoli FOR EACH ROW INSERT INTO StoricoPrezzi(id_articolo, vecchio, nuovo, data) VALUES (OLD.id, OLD.prezzo, NEW.prezzo, NOW());
Straordinaria 2025

a.s. 2024/2025

— analisi IA delle azioni di una partita di basket
Traccia A038 · Straordinaria 2025
Seconda prova — testo ministeriale
Apri ↗
I. Pagine web che, data una squadra, mostrano per ciascun giocatore le statistiche dei tipi di azione nelle partite disputate.

Conteggio per giocatore e tipo di azione con JOIN tra giocatori, azioni e partite, raggruppando.

SELECT g.nome, az.tipo, COUNT(*) AS n FROM Giocatori g JOIN Azioni az ON az.id_giocatore = g.id WHERE g.squadra = ? GROUP BY g.id, az.tipo;
II. Modifica per visualizzare la classifica del campionato aggiornata alle ultime partite.

Dai punteggi finali di ogni partita ricavi vittorie/punti per squadra (raggruppando) e ordini per punti decrescenti. Puoi calcolarla al volo con una vista o mantenerla in una tabella Classifica aggiornata a fine partita.

SELECT squadra, SUM(punti) AS tot FROM Classifica_partite GROUP BY squadra ORDER BY tot DESC;
III. Concedere all'utente "Paperino99" le sole operazioni di selezione e aggiornamento sulla tabella Articoli, dal client IP 192.168.6.6.

È un caso di DCL: si crea l'utente legato all'host (l'IP) e gli si concedono solo i privilegi SELECT e UPDATE.

CREATE USER 'Paperino99'@'192.168.6.6' IDENTIFIED BY 'password'; GRANT SELECT, UPDATE ON Articoli TO 'Paperino99'@'192.168.6.6';
IV. Gare(idGara, …) e ReferentiGare(idRef, …) in associazione 1:N: a) creare il vincolo di integrità referenziale; b) creare una vista gare+referenti senza i campi chiave.

Nell'1:N un referente segue molte gare: la chiave esterna va sulla tabella "molti" (Gare).

-- a) integrità referenziale ALTER TABLE Gare ADD idRef INT; ALTER TABLE Gare ADD FOREIGN KEY (idRef) REFERENCES ReferentiGare(idRef); -- b) vista senza i campi chiave CREATE VIEW GareReferenti AS SELECT g.nome, g.scadenzaIscrizione, g.data_inizio, g.data_fine, r.nome, r.cognome, r.email, r.telefono FROM Gare g JOIN ReferentiGare r ON g.idRef = r.idRef;
Pattern ricorrenti. Nota quante volte tornano gli stessi concetti: normalizzazione in 3NF (2023), trigger e storico (2025), GRANT/DCL, chiavi esterne e viste, HTTP stateless, JSON/XML, concorrenza e transazioni. Se padroneggi questi, sei coperto su gran parte della seconda parte.