Normalizzazione vs Denormalizzazione
Le banche dati relazionali sono costituite da relazioni (tabelle correlate). Le tabelle sono composte da colonne. Se le tabelle sono due grandi (ovvero troppe colonne in una tabella), possono verificarsi anomalie del database. Se le tabelle sono due piccole (cioè il database è composto da molte tabelle più piccole), sarebbe inefficiente per l'esecuzione di query. La normalizzazione e la denormalizzazione sono due processi utilizzati per ottimizzare le prestazioni del database. La normalizzazione riduce al minimo le ridondanze presenti nelle tabelle di dati. La denormalizzazione (inversa della normalizzazione) aggiunge dati ridondanti o dati di gruppo.
Cos'è la normalizzazione?
La normalizzazione è un processo che viene eseguito per ridurre al minimo le ridondanze presenti nei dati nei database relazionali. Questo processo dividerà principalmente tabelle di grandi dimensioni in tabelle più piccole con meno ridondanze (denominate "forme normali"). Queste tabelle più piccole saranno correlate tra loro attraverso relazioni ben definite. In un database ben normalizzato, qualsiasi alterazione o modifica dei dati richiederà la modifica di una sola tabella. La prima forma normale (1NF), la seconda forma normale (2NF) e la terza forma normale (3NF) furono introdotte da Edgar F. Codd. Boyce-Codd Normal Form (BCNF) è stato introdotto nel 1974 da Codd e Raymond F. Boyce. Sono state definite forme normali superiori (4NF, 5NF e 6NF), ma vengono utilizzate raramente.
Una tabella conforme a 1NF assicura che rappresenti effettivamente una relazione (cioè non contenga record che si ripetono) e non contenga attributi con valore relazionale (es.e. tutti gli attributi dovrebbero avere valori atomici). Affinché una tabella sia conforme a 2NF, deve essere conforme a 1NF e qualsiasi attributo che non fa parte di alcuna chiave candidata (cioè attributi non primi) deve dipendere completamente da una qualsiasi delle chiavi candidate nella tabella. Secondo la definizione di Codd, una tabella si dice in 3NF, se e solo se quella tabella è nella seconda forma normale (2NF) e ogni attributo nella tabella che non appartiene a una chiave candidata dovrebbe dipendere direttamente da ogni chiave candidata di quella tabella. BCNF (noto anche come 3.5NF) cattura alcune delle anomalie che non vengono affrontate dal 3NF.
Cos'è la denormalizzazione?
La denormalizzazione è il processo inverso del processo di normalizzazione. La denormalizzazione funziona aggiungendo dati ridondanti o raggruppando i dati per ottimizzare le prestazioni. Anche se l'aggiunta di dati ridondanti sembra controproducente, a volte la denormalizzazione è un processo molto importante per superare alcune delle carenze nel software di database relazionali che possono comportare pesanti penalizzazioni delle prestazioni con database normalizzati (anche ottimizzati per prestazioni più elevate). Questo perché l'unione di più relazioni (che sono i risultati della normalizzazione) per produrre un risultato in una query a volte può essere lenta a seconda dell'effettiva implementazione fisica dei sistemi di database.
Qual è la differenza tra normalizzazione e denormalizzazione?
– Normalizzazione e denormalizzazione sono due processi completamente opposti.
– La normalizzazione è il processo di divisione delle tabelle più grandi in tabelle più piccole riducendo i dati ridondanti, mentre la denormalizzazione è il processo di aggiunta di dati ridondanti per ottimizzare le prestazioni.
– Viene eseguita la normalizzazione per prevenire anomalie nei database.
– La denormalizzazione viene solitamente eseguita per migliorare le prestazioni di lettura del database, ma a causa dei vincoli aggiuntivi utilizzati per la denormalizzazione, le scritture (ad esempio le operazioni di inserimento, aggiornamento ed eliminazione) possono diventare più lente. Pertanto, un database denormalizzato può offrire prestazioni di scrittura peggiori rispetto a un database normalizzato.
– Si consiglia spesso di "normalizzare finché non fa male, denormalizzare finché non funziona".