La normalizzazione nel contesto dei database relazionali (RDBMS) è un processo utilizzato per organizzare i dati in modo efficiente e ridurre la ridondanza. Questo processo consiste nel suddividere un database in tabelle più piccole e legando le stesse attraverso relazioni, con l’obiettivo di minimizzare la duplicazione dei dati e migliorare l’integrità dei dati stessi.
La normalizzazione è tipicamente suddivisa in diverse forme normali (Normal Forms, NF), ciascuna delle quali si basa sulla precedente e richiede il rispetto di determinati criteri:
Prima Forma Normale (1NF): Una tabella è in 1NF se:
- Tutte le colonne contengono solo valori atomici (cioè, ciascuna cella della tabella deve contenere un singolo valore e non un set di valori).
- Tutte le voci in una colonna devono essere dello stesso tipo di dati.
Seconda Forma Normale (2NF): Un database è in 2NF se:
- È già in 1NF.
- Tutti gli attributi non chiave devono essere completamente dipendenti dalla chiave primaria.
Terza Forma Normale (3NF): Un database è in 3NF se:
- È già in 2NF.
- Gli attributi non chiave non devono essere dipendenti transitivamente da una chiave primaria.
Boyce-Codd Normal Form (BCNF): È una versione più rigorosa della 3NF:
- Ogni determinante è una superchiave.
1. Non normalizzato: Supponiamo di avere una tabella con una struttura simile a questa: \`\`\` | StudenteID | NomeStudente | Corso1 | Corso2 | Corso3 | |——————|———————|————|————|————| | 1 | Mario Rossi | Matematica | Fisica | Chimica | | 2 | Luigi Bianchi| Biologia | Chimica | Informatica | \`\`\`
1. Prima Forma Normale (1NF): La tabella sopra non rispetta la 1NF perché contiene più valori in una singola cella. Ecco come potrebbe apparire in 1NF: \`\`\` | StudenteID | NomeStudente | Corso | |——————|———————|—————-| | 1 | Mario Rossi | Matematica | | 1 | Mario Rossi | Fisica | | 1 | Mario Rossi | Chimica | | 2 | Luigi Bianchi| Biologia | | 2 | Luigi Bianchi| Chimica | | 2 | Luigi Bianchi| Informatica | \`\`\`
1. Seconda Forma Normale (2NF):
Il passaggio successivo comporta la suddivisione di dati che dipendono solo parzialmente dalla chiave primaria. Ad esempio:
- Tavola Studente:
\`\`\`
| StudenteID | NomeStudente |
|——————|———————-|
| 1 | Mario Rossi |
| 2 | Luigi Bianchi |
\`\`\`
- Tavola Corsi: \`\`\` | CorsoID | NomeCorso | |————-|———————| | 1 | Matematica | | 2 | Fisica | | 3 | Chimica | | 4 | Biologia | | 5 | Informatica | \`\`\`
- Tavola StudenteCorso: \`\`\` | StudenteID | CorsoID | |——————|————-| | 1 | 1 | | 1 | 2 | | 1 | 3 | | 2 | 4 | | 2 | 3 | | 2 | 5 | \`\`\`
Fonti utilizzate:
- Connolly, T., & Begg, C. (2015). “Database Systems: A Practical Approach to Design, Implementation, and Management.” Pearson Education.
- Codd, E. F. (1970). “A Relational Model of Data for Large Shared Data Banks.” Communications of the ACM.
- Elmasri, R., & Navathe, S. B. (2016). “Fundamentals of Database Systems.” Pearson Education.
Questi testi sono ampiamente riconosciuti e utilizzati in contesti accademici e professionali per lo studio dei sistemi di database relazionali.