Normalizzazione vs Denormalizzazione
I database relazionali sono costituiti 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 nel database. Se le tabelle sono due piccole (ovvero il database è costituito da molte tabelle più piccole), sarebbe inefficiente per l'esecuzione di query. Normalizzazione e denormalizzazione sono due processi che vengono utilizzati per ottimizzare le prestazioni del database. La normalizzazione riduce al minimo le ridondanze presenti nelle tabelle di dati. Denormalizzazione (retromarcia della normalizzazione) aggiunge dati ridondanti o dati di gruppo.
Cos'è la normalizzazione?
La normalizzazione è un processo che viene eseguito per minimizzare le ridondanze presenti nei dati nei database relazionali. Questo processo dividerà principalmente tabelle di grandi dimensioni in tabelle più piccole con meno ridondanze (chiamate "Forme normali"). Queste tabelle più piccole saranno correlate tra loro attraverso relazioni ben definite. In un database ben normalizzato, qualsiasi modifica o modifica nei dati richiederà la modifica di una sola tabella. La prima forma normale (1NF), la seconda forma normale (2NF) e la terza forma normale (3NF) sono state introdotte da Edgar F. Codd. Boyce-Codd Normal Form (BCNF) fu introdotto nel 1974 da Codd e Raymond F. Boyce. Sono state definite forme normali più alte (4NF, 5NF e 6NF), ma vengono utilizzate raramente.
Una tabella conforme a 1NF assicura che rappresenti effettivamente una relazione (ovvero non contiene alcun record che si sta ripetendo) e non contiene alcun attributo che sia di valore relazionale (cioè tutti gli attributi dovrebbero avere valori atomici). Affinché una tabella sia conforme a 2NF, dovrebbe essere conforme a 1NF e qualsiasi attributo che non fa parte di alcuna chiave candidata (ovvero attributi non principali) dovrebbe dipendere completamente da una qualsiasi delle chiavi candidate nella tabella. Secondo la definizione del Codd, una tabella si dice che sia 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 quel tavolo. BCNF (noto anche come 3.5NF) cattura alcune anomalie che non sono 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 suona controproducente, a volte la denormalizzazione è un processo molto importante per superare alcune delle carenze nel software di database relazionale che può comportare pesanti penalizzazioni delle prestazioni con database normalizzati (anche ottimizzato per prestazioni più elevate). Questo perché unire diverse relazioni (che sono i risultati della normalizzazione) per produrre un risultato in una query a volte può essere lento a seconda dell'implementazione fisica effettiva 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 di tabelle più grandi in quelle più piccole riducendo i dati ridondanti, mentre la denormalizzazione è il processo di aggiunta di dati ridondanti per ottimizzare le prestazioni. - La normalizzazione viene eseguita per prevenire anomalie dei database. - La denormalizzazione viene in genere eseguita per migliorare le prestazioni di lettura del database, ma a causa dei vincoli aggiuntivi utilizzati per la denormalizzazione, le scritture (ovvero inserimento, aggiornamento ed eliminazione) possono rallentare. Pertanto, un database denormalizzato può offrire prestazioni di scrittura peggiori rispetto a un database normalizzato. - Si consiglia spesso di "normalizzare fino a quando non fa male, denormalizzare finché non funziona".
|