Se hai lavorato per un po 'con i database, è probabile che tu abbia sentito il termine normalizzazione. Forse qualcuno ti ha chiesto "il database è normalizzato?" o "È quello in BCNF?" La normalizzazione viene spesso trascurata come un lusso a cui solo gli accademici hanno tempo per dedicarsi. Tuttavia, conoscere i principi della normalizzazione e applicarli alle attività quotidiane di progettazione del database non è poi così complicato e potrebbe migliorare drasticamente le prestazioni del DBMS.
In questo articolo, introdurremo il concetto di normalizzazione e daremo una breve occhiata alle forme normali più comuni.
Cos'è la normalizzazione?
La normalizzazione è il processo di organizzazione efficiente dei dati in un database. Esistono due obiettivi del processo di normalizzazione: eliminazione dei dati ridondanti (ad esempio, memorizzazione degli stessi dati in più di una tabella) e garanzia delle dipendenze dei dati (solo memorizzazione dei dati correlati in una tabella). Entrambi questi sono obiettivi degni di nota in quanto riducono la quantità di spazio che un database consuma e garantiscono che i dati siano archiviati logicamente.
Le forme normali
La comunità di database ha sviluppato una serie di linee guida per garantire che i database siano normalizzati. Questi sono indicati come forme normali e sono numerati da uno (la forma più bassa di normalizzazione, indicata come prima forma normale o 1NF) attraverso cinque (quinta forma normale o 5NF). Nelle applicazioni pratiche, vedrai spesso 1NF, 2NF e 3NF insieme al 4NF occasionale. La quinta forma normale è vista molto raramente e non verrà discussa in questo articolo.
Prima di iniziare la nostra discussione sulle forme normali, è importante sottolineare che sono solo linee guida e linee guida. Occasionalmente, diventa necessario allontanarsi da loro per soddisfare requisiti aziendali pratici. Tuttavia, quando si verificano variazioni, è estremamente importante valutare eventuali ramificazioni che potrebbero avere sul tuo sistema e tenere conto di eventuali incongruenze. Detto questo, esploriamo le forme normali.
Prima forma normale (1NF)
First normal form (1NF) imposta le regole di base per un database organizzato:
- Elimina le colonne duplicative dalla stessa tabella.
- Crea tabelle separate per ciascun gruppo di dati correlati e identifica ciascuna riga con una colonna o un gruppo di colonne univoci (la chiave primaria).
Second Normal Form (2NF)
La seconda forma normale (2NF) affronta ulteriormente il concetto di rimozione dei dati duplicativi:
- Soddisfare tutti i requisiti del primo modulo normale.
- Rimuovi sottoinsiemi di dati che si applicano a più righe di una tabella e inseriscili in tabelle separate.
- Creare relazioni tra queste nuove tabelle e i loro predecessori attraverso l'uso di chiavi esterne.
Terza forma normale (3NF)
La terza forma normale (3NF) fa un ulteriore passo avanti:
- Soddisfa tutti i requisiti della seconda forma normale.
- Rimuovi le colonne che non dipendono dalla chiave primaria.
Forma normale Boyce-Codd (BCNF o 3.5NF)
La forma normale di Boyce-Codd, indicata anche come "terza e metà (3.5) forma normale", aggiunge un ulteriore requisito:
- Soddisfa tutti i requisiti del terzo modulo normale.
- Ogni determinante deve essere una chiave candidata.
Quarta forma normale (4NF)
Infine, la quarta forma normale (4NF) ha un requisito aggiuntivo:
- Soddisfa tutti i requisiti del terzo modulo normale.
- Una relazione è in 4NF se non ha dipendenze multivalore.
Ricorda, queste linee guida per la normalizzazione sono cumulative. Affinché un database sia in 2NF, deve prima soddisfare tutti i criteri di un database 1NF.
Devo normalizzare?
Mentre la normalizzazione del database è spesso una buona idea, non è un requisito assoluto. In effetti, ci sono alcuni casi in cui deliberatamente violare le regole di normalizzazione è una buona pratica. Per ulteriori informazioni su questo argomento, leggere Devo normalizzare il mio database?
Se si desidera assicurarsi che il database sia normalizzato, iniziare con l'apprendimento della modalità di inserimento del database in First Normal Form.