Salta ai contenuti

Denormalizzazione

A volte un po’ di disordine controllato è una scelta intenzionale

Sezione intitolata “A volte un po’ di disordine controllato è una scelta intenzionale”

La denormalizzazione è la scelta di duplicare alcuni dati per ottenere vantaggi pratici, spesso in velocità di lettura o semplicità di certe query.

È il contrario della normalizzazione pura, ma non è per forza sbagliata. Dipende dal problema che stai cercando di risolvere.

Pensa a una ricetta che copi su un foglio da tenere vicino ai fornelli. La ricetta originale resta nel libro, ma la copia ti fa risparmiare tempo mentre cucini.

Nel database, a volte copi un dato in più per leggere più in fretta.

Può essere utile quando:

  • hai report pesanti letti continuamente
  • fai molte query complicate con join costose
  • la velocità di lettura conta più della perfezione teorica

Il rischio è introdurre incoerenze.

Se un dato è copiato in più posti, quando cambia devi ricordarti di aggiornarlo ovunque. La denormalizzazione va quindi fatta con un motivo preciso, non per comodità momentanea.

In una tabella ordini potresti salvare anche nome_cliente, oltre a cliente_id, per rendere un report più rapido da leggere.

SELECT numero_ordine, nome_cliente, totale
FROM ordini_report;

Questa scelta può essere utile per un report. Ma se il cliente cambia nome, devi sapere come aggiornare anche la copia.