title: Denormalizzazione
text: # Denormalizzazione
  
  La denormalizzazione di una banca dati è il processo per cui si portano i dati sottoposti ad un processo di normalizzazione a quelli originari. Per sua natura la denormalizzazione porta a una ripetizione dei dati o all'aggiunta di dati non necessari.
  
  Si dice quindi denormalizzata una relazione non in forma normale. In genere la denormalizzazione porta alla rinuncia alla terza forma normale, anche se in certi casi occorre rinunciare anche alla seconda forma normale. Questo è il caso tipico in cui una relazione molti-a-molti viene risolta con una tabella con chiave primaria che sostituisce un insieme di campi che altrimenti sarebbero una chiave candidata multipla.
  
  La denormalizzazione è molto usata specie in contesti come il datawarehouse. In quel contesto, dove la velocità di risposta della banca dati a una query ha un'importanza maggiore rispetto all'organizzazione dei dati, è utile avere una denormalizzazione delle tabelle per evitare di fare delle join aggiuntive. Generalmente la denormalizzazione si usa trasformando le relazioni gerarchiche del tipo uno-a-molti in un'unica relazione e quindi in un'unica tabella.
  
  Ad esempio nel caso di serie storiche le date dopo essere state normalizzate (ovvero fissate entro un intervallo che si estende da 1 ad infinito, a seconda del periodo considerato), vengono riportate alla loro forma originale.
  
  ## Normalizzazione e denormalizzazione
  
  I principali vantaggi della normalizzazione sono:
  
  * l'eliminazione della ridondanza dell'informazione: l'informazione è memorizzata una volta sola e non duplicata
  * la semplicità di gestione dell'informazione: l'informazione, non essendo duplicata, può essere corretta o eliminata senza particolari ricerche e senza il rischio di non completare correttamente l'operazione
  
  Tali vantaggi sono persi con una struttura sottoposta al processo di denormalizzazione in quanto:
  
  * l'informazione viene duplicata (e quindi c'è una maggiore occupazione di spazio di memoria)
  * l'informazione, se errata, deve essere corretta in più punti e si incorre nella possibilità, in caso di eliminazione, di lasciare presenti accidentalmente dei dati che si ritenevano rimossi
  * la logica del programma che deve gestire quanto precedentemente esposto è necessariamente più complessa rispetto a quella che gestisce un database normalizzato
  
  La presenza dell'informazione denormalizzata rende però molto più rapida la ricerca e la presentazione dei dati, in quanto l'informazione è più accessibile e la struttura realizzata in genere è molto più vicina a quella di immediata fruizione rispetto a quella ottimizzata per la gestione.
  
  