3.1 Normalizzazione del database

La forma normale è una proprietà di una relazione in un modello di dati relazionale che la caratterizza in termini di ridondanza, portando potenzialmente a risultati logicamente errati di campionamento o modifica dei dati. La forma normale è definita come l'insieme dei requisiti che una relazione (tabelle in un database) deve soddisfare.

Il processo di conversione delle relazioni di database in una forma conforme alle forme normali è chiamato normalizzazione. La normalizzazione ha lo scopo di portare la struttura del database in una forma che fornisca una ridondanza logica minima e non ha lo scopo di ridurre o aumentare le prestazioni o ridurre o aumentare il volume fisico del database .

L'obiettivo finale della normalizzazione è ridurre la potenziale incoerenza delle informazioni memorizzate nel database. Lo scopo generale del processo di normalizzazione è il seguente:

  • esclusione di alcuni tipi di licenziamento;
  • correggere alcune anomalie di aggiornamento;
  • sviluppo di un progetto di database che sia una rappresentazione sufficientemente “di alta qualità” del mondo reale, sia intuitivo e possa servire come buona base per successive espansioni;
  • semplificare la procedura per l'applicazione dei necessari vincoli di integrità.

La ridondanza viene solitamente eliminata scomponendo le relazioni in modo tale che in ciascuna relazione vengano memorizzati solo fatti primari (ovvero fatti che non derivano da altri fatti memorizzati).

Sebbene le idee di normalizzazione siano molto utili per la progettazione di database, non sono affatto un mezzo universale o esaustivo per migliorare la qualità della progettazione di un database. Ciò è dovuto al fatto che c'è troppa varietà di possibili errori e carenze nella struttura del database che non possono essere eliminati dalla normalizzazione.

Nonostante queste considerazioni, la teoria della normalizzazione è un risultato molto prezioso della teoria e della pratica relazionale, poiché fornisce criteri scientificamente rigorosi e ragionevoli per la qualità di un progetto di database e metodi formali per migliorare questa qualità. Ciò distingue la teoria della normalizzazione dagli approcci di progettazione puramente empirici offerti in altri modelli di dati. Inoltre, si può sostenere che nell'intero campo dell'informatica non esistono praticamente metodi per valutare e migliorare soluzioni progettuali paragonabili alla teoria della normalizzazione dei database relazionali in termini di livello di rigore formale.

La normalizzazione a volte viene criticata sulla base del fatto che "è solo buon senso" e qualsiasi professionista competente progetterà "naturalmente" un database completamente normalizzato senza dover applicare la teoria della dipendenza.

Tuttavia, come ha notato il professor Christopher Date, la normalizzazione è precisamente i principi del buon senso che guidano nella sua mente un progettista maturo, cioè i principi della normalizzazione sono il senso comune formalizzato . Nel frattempo, identificare e formalizzare i principi del buon senso è un compito molto difficile e il successo nel risolverlo è un risultato significativo.

3.2 Prima forma normale

La prima forma normale (1NF) è la forma normale di base di una relazione nel modello di dati relazionale.

Una variabile di relazione è in prima forma normale se e solo se, in qualsiasi valore valido di quella variabile, ogni tupla di relazione contiene esattamente un valore per ciascuno degli attributi.

In un modello relazionale, una relazione è sempre in prima forma normale, per definizione del concetto di relazione.

Per quanto riguarda le varie tabelle, potrebbero non essere rappresentazioni corrette di relazioni e, di conseguenza, potrebbero non essere in 1NF. Secondo la definizione di Christopher Date per un caso del genere, una tabella è normalizzata (equivalentemente, è nella prima forma normale) se e solo se è una rappresentazione diretta e vera di qualche relazione. In particolare, la tabella in questione deve soddisfare le seguenti cinque condizioni:

  • Non esiste un ordinamento delle righe dall'alto verso il basso (in altre parole, l'ordine delle righe non trasmette alcuna informazione).
  • Non esiste un ordinamento da sinistra a destra delle colonne (in altre parole, l'ordine delle colonne non contiene informazioni).
  • Nessuna riga duplicata.
  • Ogni intersezione di una riga e di una colonna contiene esattamente un valore del dominio corrispondente (e nient'altro).
  • Tutte le colonne sono "normali".

La "regolarità" di tutte le colonne di una tabella significa che non ci sono componenti "nascosti" nella tabella a cui è possibile accedere solo nell'invocazione di qualche operatore speciale invece di fare riferimento a nomi di colonne normali o che portano a effetti collaterali per le righe o tabelle quando si richiamano operatori standard.

La tabella originale non normalizzata (ovvero, non una rappresentazione corretta di qualche relazione):

Dipendente Numero di telefono
Ivanov I.I.

283-56-82

390-57-34

Petrov P.P. 708-62-34
Sidorov S.S.

Una tabella ridotta a 1NF, che è la rappresentazione corretta di qualche relazione:

Dipendente Numero di telefono
Ivanov I.I. 283-56-82
Ivanov I.I. 390-57-34
Petrov P.P. 708-62-34

3.3 Seconda forma normale

Una variabile di relazione è in seconda forma normale se e solo se è in prima forma normale e ogni attributo non chiave è irriducibilmente dipendente da (ogni) sua chiave candidata .

Irriducibilità significa che la chiave potenziale non contiene un sottoinsieme più piccolo di attributi da cui può essere derivata anche questa dipendenza funzionale. Per una dipendenza funzionale irriducibile, viene spesso utilizzato il concetto equivalente di "dipendenza funzionale completa".

Se la chiave candidata è semplice, cioè consiste in un singolo attributo, allora qualsiasi dipendenza funzionale da essa è irriducibile (completa). Se la chiave candidata è una chiave composta, allora, secondo la definizione della seconda forma normale, non ci devono essere attributi non chiave nella relazione che dipendano da parte della chiave candidata composta.

Un esempio di conversione di una relazione nella seconda forma normale

Sia la coppia di attributi {Company branch, Position} a formare la chiave primaria nella seguente relazione:

R
Ramo d'azienda Titolo di lavoro Stipendio Disponibilità di un computer
Filiale a Tomsk Più pulito 20000 NO
Filiale a Mosca Programmatore 40000 Mangiare
Filiale a Tomsk Programmatore 25000 Mangiare

Diciamo che lo stipendio dipende dalla filiale e dalla posizione, e la disponibilità di un computer dipende solo dalla posizione.

Esiste una dipendenza funzionale Posizione -> Avere un computer, in cui il lato sinistro (determinante) è solo una parte della chiave primaria, che viola la condizione della seconda forma normale.

Per ridurre a 2NF, la relazione originale dovrebbe essere scomposta in due relazioni:

R1
Ramo d'azienda Titolo di lavoro Stipendio
Filiale a Tomsk Più pulito 20000
Filiale a Mosca Programmatore 40000
Filiale a Tomsk Programmatore 25000
R2
Titolo di lavoro Disponibilità di un computer
Più pulito NO
Programmatore Mangiare
Programmatore Mangiare

3.4 Terza forma normale (3NF)

Una variabile di relazione R è in 3NF se e solo se sono vere le seguenti condizioni:

  • Rè in seconda forma normale.
  • nessun attributo non chiaveRnon è in dipendenza funzionale transitiva dalla chiave candidataR.

Spiegazioni per la definizione:

Un attributo non chiave di una relazione R è un attributo che non appartiene a nessuna delle chiavi candidate di R.

La dipendenza funzionale dell'insieme di attributi Z dall'insieme di attributi X (scritto X → Z, pronunciato “x determina z”) è transitiva se esiste un insieme di attributi Y tale che X → Y e Y → Z. In questo caso, nessuno degli insiemi X, Y e Z non è un sottoinsieme dell'altro, cioè le dipendenze funzionali X → Z, X → Y e Y → Z non sono banali, e non c'è nemmeno alcuna dipendenza funzionale Y → X.

Una definizione di 3NF, equivalente a quella di Codd ma formulata diversamente, è stata data da Carlo Zaniolo nel 1982. Secondo esso, una variabile di relazione è in 3NF se e solo se ciascuna delle sue dipendenze funzionali X → A soddisfa almeno una delle seguenti condizioni:

  • X contiene A (ovvero, X → A è una banale dipendenza funzionale)
  • X - tasto super
  • A è un attributo chiave (ovvero, A fa parte di una chiave candidata).

La definizione di Zaniolo definisce chiaramente la differenza tra 3NF e la più stringente Boyce-Codd Normal Form (BCNF): BCNF esclude la terza condizione ("A è un attributo chiave").

Un riassunto memorabile e tradizionalmente descrittivo della definizione 3NF di Codd è stato fornito da Bill Kent: ogni attributo non chiave "dovrebbe fornire informazioni sulla chiave, la chiave completa e nient'altro che la chiave ".

La condizione di dipendenza dalla "chiave completa" degli attributi non chiave assicura che la relazione sia nella seconda forma normale; e la condizione perché dipendano da "nient'altro che la chiave" è che si trovino nella terza forma normale.

Chris Date parla del riassunto di Kent come di una "caratteristica intuitivamente attraente" di 3NF e osserva che, con una leggera modifica, può anche servire come definizione della più rigorosa forma normale di Boyce-Codd: "ogni attributo deve fornire informazioni su una chiave , una chiave completa, e nient'altro che la chiave.

La versione di Kent della definizione 3NF è meno rigida della versione in forma normale di Boyce-Codd della formulazione di Data, poiché la prima afferma solo che gli attributi non chiave dipendono dalle chiavi.

Gli attributi primari (che sono chiavi o parti di essi) non devono essere affatto dipendenti dal punto di vista funzionale; ognuno di essi fornisce informazioni sulla chiave fornendo la chiave stessa o parte di essa. Va notato qui che questa regola è valida solo per attributi non chiave, poiché applicarla a tutti gli attributi disabiliterà completamente tutte le chiavi alternative complesse, poiché ogni elemento di tale chiave violerà la condizione di "chiave completa".

Considera la variabile di relazione R1 come esempio:

R1
Dipendente Dipartimento Telefono
Grishin Contabilità 22-11-33
Vasiliev Contabilità 22-11-33
Petrov Fornitura 44-55-66

Ogni dipendente appartiene esclusivamente ad un reparto; ogni dipartimento ha un solo telefono. L'attributo Employee è la chiave primaria. I dipendenti non hanno telefoni personali e il numero di telefono del dipendente dipende esclusivamente dal dipartimento.

Nell'esempio esistono le seguenti dipendenze funzionali: Dipendente → Reparto, Reparto → Telefono, Dipendente → Telefono.

La variabile di relazione R1 è in seconda forma normale perché ogni attributo ha una dipendenza funzionale irriducibile dalla potenziale chiave Impiegato.

La relazione Dipendente → Telefono è transitiva, quindi la relazione non è in terza forma normale.

La divisione di R1 produce due variabili di relazione che sono in 3NF:

R2
Dipartimento Telefono
Contabilità 22-11-33
Fornitura 44-55-66

R3
Dipendente Dipartimento
Grishin Contabilità
Vasiliev Contabilità
Petrov Fornitura

La relazione iniziale R1, se necessario, si ottiene facilmente come risultato dell'operazione di unione delle relazioni R2 e R3.