Che cos'è la normalizzazione del database?

La normalizzazione del database è un processo utilizzato nella progettazione di database per organizzare i dati in modo efficiente. Può contribuire a ridurre la ridondanza dei dati (dati duplicati) e a migliorare l'integrità dei dati (accuratezza e coerenza dei dati). È come organizzare un archivio disordinato: invece di avere le stesse informazioni in più posti, metti ogni informazione in un unico posto e poi usi un sistema di riferimenti incrociati per collegarle.

Cosa si intende per "database"?

Un database è semplicemente una raccolta organizzata di dati, solitamente archiviati elettronicamente in un'unità di elaborazione. Immagina che sia un archivio digitale. Invece di utilizzare cartelle e cassetti di carta, usi tabelle strutturate (o altri metodi di organizzazione dei dati) che ti consentono di archiviare, gestire e recuperare le informazioni in modo rapido ed efficiente.

Le aziende moderne utilizzano i database per tenere traccia di tutto, dagli ordini dei clienti e dai livelli di inventario ai dettagli degli account utente e alle transazioni finanziarie, e molte scelgono di eseguire i propri database nel cloud.

Cos'è un database relazionale?

Un database relazionale organizza i dati in una o più tabelle di colonne e righe. Viene chiamato "relazionale" perché stabilisce relazioni specifiche e predefinite tra queste tabelle. L'idea di base è quella di suddividere le informazioni complesse in parti più piccole e gestibili, evitando la necessità di archiviare le stesse informazioni più volte.

Esempio di normalizzazione del database

Immagina un semplice database per un negozio online. Avresti una tabella per i clienti (nome, indirizzo, telefono) e un'altra per gli ordini (data, totale). Quando un cliente effettua un ordine, non devi copiare l'intero indirizzo nella tabella Ordini, ma puoi utilizzare il suo ID cliente univoco per collegare l'ordine ai dettagli completi del cliente.

Se il cliente si trasferisce e cambia indirizzo, devi aggiornarlo solo in un posto: la tabella Clienti. Se lo copiassi in 100 record di ordini, dovresti aggiornarli tutti e 100, il che probabilmente porterebbe a dati disordinati e incoerenti. Questo problema di dover aggiornare le informazioni in molti posti è chiamato anomalia dei dati.

Tuttavia, vogliamo copiare il prezzo di un prodotto nel record dell'ordine al momento dell'acquisto. Perché? Perché il prezzo del prodotto potrebbe cambiare in futuro nella tabella principale Prodotti, ma il record dell'ordine deve riflettere il prezzo effettivamente pagato dal cliente alla data della transazione. In questo caso, la scelta di progettazione corretta è copiare e bloccare i dati (o creare uno snapshot).

La normalizzazione è il processo sistematico di progettazione delle tabelle relazionali e delle relazioni tra di esse per eliminare queste incongruenze e risparmiare spazio di archiviazione. Le "forme normali" (1NF, 2NF, 3NF ecc.) sono una serie di regole prescrittive. Sono una soluzione alla ridondanza dei dati e alle anomalie che crea, fornendo un percorso chiaro per organizzare i dati in modo efficiente e affidabile in base alle esigenze dell'applicazione.

Diverse forme normali (1FN, 2FN, 3FN)

La normalizzazione è una guida passo passo per strutturare le tabelle, in cui ogni passaggio (o "forma") si basa sul precedente. Per essere in terza forma normale (3NF), una tabella deve superare i test per 1NF e 2NF. La maggior parte dei database operativi è progettata per soddisfare almeno lo standard 3NF perché può fornire un equilibrio tra integrità dei dati e prestazioni.

La regola della 1FN riguarda l'assicurarsi che le tabelle siano strutturate correttamente fin dall'inizio, come quando si imposta un foglio di lavoro pulito.

Regola: ogni colonna deve avere un nome univoco e ogni cella deve contenere un solo valore indivisibile.

Cosa risolve: non puoi inserire un elenco di elementi in una singola cella. Ad esempio, in una tabella "Ordini" non puoi elencare "Latte, Uova, Pane" in una sola cella sotto la colonna "Prodotti ordinati". Invece, ogni prodotto deve avere la propria riga, il che garantisce che i dati siano ricercabili e gestibili.

La regola della 2FN si applica solo se la tabella utilizza una chiave composita, ovvero una chiave primaria costituita da due o più colonne combinate (come un ID ordine più un ID prodotto). Una chiave primaria è la colonna o l'insieme di colonne i cui valori identificano in modo univoco ogni riga di una tabella. Una colonna non chiave è una colonna che non fa parte della chiave primaria.

Regola: una tabella deve già essere in 1NF e tutte le colonne non chiave devono dipendere dall'intera chiave composita, non solo da una parte di essa.

Cosa risolve: dovresti riuscire ad archiviare i dati solo dove sono completamente pertinenti. Se hai una tabella in cui la chiave è (OrderID, ProductID), una colonna come Prezzo del prodotto non dovrebbe essere presente perché il prezzo dipende solo dal ProductID, non dall'OrderID. La soluzione consiste nello spostare ProductID e Prezzo del prodotto in una tabella Prodotti separata, in cui ProductID è l'unica chiave primaria. In questo modo, il prezzo del prodotto non viene ripetuto inutilmente per ogni ordine che lo contiene.

La regola 3NF è l'obiettivo più comune per la progettazione di database e riguarda la rimozione delle relazioni indirette tra i punti dati.

Regola: una tabella deve essere in 2NF e le colonne non chiave devono dipendere solo dalla chiave primaria, non da altre colonne non chiave.

Cosa risolve: evita che un dato non chiave determini il valore di un altro dato non chiave. Considera una tabella "Dipendenti" che memorizza un ID ufficio (una colonna non chiave) e la posizione dell'ufficio (un'altra colonna non chiave). La posizione dell'ufficio è determinata dall'ID dell'ufficio, non dall'ID del dipendente (la chiave primaria della tabella). Questo collegamento indiretto è una dipendenza transitiva. Per risolvere il problema, crei una nuova tabella Uffici contenente solo l'ID ufficio e la posizione dell'ufficio, quindi colleghi le due tabelle utilizzando l'ID ufficio. In questo modo, se la sede dell'ufficio cambia, devi aggiornare la posizione solo in un unico posto.

Normalizzazione e denormalizzazione

Funzionalità

Normalizzazione

Denormalizzazione

Obiettivo principale

Riduci la ridondanza, migliora l'integrità dei dati.

Migliora prestazioni di lettura.

Esempi di casi d'uso

Database transazionali (aggiornamenti frequenti).

Database analitici e data warehouse (letture frequenti); dati che non devono cambiare dopo la creazione (ad esempio, uno snapshot di un contratto o di una fattura).

Risultato

Più tabelle, meno duplicazione dei dati.

Meno tabelle, duplicazione intenzionale dei dati.

Funzionalità

Normalizzazione

Denormalizzazione

Obiettivo principale

Riduci la ridondanza, migliora l'integrità dei dati.

Migliora prestazioni di lettura.

Esempi di casi d'uso

Database transazionali (aggiornamenti frequenti).

Database analitici e data warehouse (letture frequenti); dati che non devono cambiare dopo la creazione (ad esempio, uno snapshot di un contratto o di una fattura).

Risultato

Più tabelle, meno duplicazione dei dati.

Meno tabelle, duplicazione intenzionale dei dati.

La denormalizzazione è l'aggiunta intenzionale di dati ridondanti a un database, spesso per migliorare le prestazioni delle query per la creazione di report o l'analisi. È un compromesso: si sacrifica parte dell'integrità e si aumenta lo spazio di archiviazione per un recupero dei dati più rapido. Tuttavia, in scenari come un contratto legale, potresti volere questa ridondanza intenzionale per creare uno snapshot dei dati indipendente dalle modifiche future. Ciò garantisce che i termini, i nomi e i prezzi registrati al momento della firma del contratto rimangano fissi e disponibili in modo permanente, anche se i dati primari del cliente o del prodotto vengono aggiornati in un secondo momento.

Perché la normalizzazione del database è importante?

La normalizzazione rende i database relazionali (come Cloud SQL o Spanner) più efficienti, affidabili e facili da gestire utilizzando "forme normali" per strutturare i dati ed evitare problemi comuni. 

Riduci la ridondanza dei dati

Archivia ogni dato, come l'indirizzo di un cliente, in un solo posto per risparmiare spazio di archiviazione e aumentare l'efficienza.

Elimina le anomalie dei dati

Evita le incongruenze che possono verificarsi con dati ridondanti, come anomalie di inserimento, eliminazione o aggiornamento.

Migliora l'integrità dei dati

Garantisci l'accuratezza e la coerenza dei dati nel database assicurandoti che ogni dato sia corretto e archiviato in un'unica posizione.

Se la tua priorità è ottenere prestazioni elevatissime, una scalabilità massiccia o uno schema flessibile, potresti invece scegliere un database non relazionale (NoSQL), come Bigtable o Firestore. I database NoSQL sono progettati con principi diversi che includono intenzionalmente la ridondanza dei dati per ottimizzare la velocità di lettura e la disponibilità.

Risolvi le tue sfide aziendali con Google Cloud

I nuovi clienti ricevono 300 $ di crediti gratuiti da spendere su Google Cloud.

Fai il prossimo passo

Inizia a creare su Google Cloud con 300 $ di crediti gratuiti e oltre 20 prodotti Always Free.

Google Cloud