Premessa

Portale di appartenenza: Basi di dati.

Cosa troverai in questa nota:

Prerequisiti: per comprendere pienamente il contenuto di questa nota, oltre le conoscenze minime che do per scontato che tu sappia giΓ , ti consiglio di aver letto in precedenza queste altre note:

Buona lettura! β˜οΈπŸ€“


Definizione: normalizzazione

La normalizzazione Γ¨ il processo di trasformazione di una base di dati relazionale in una equivalente, con l’obiettivo di eliminare ridondanze, minimizzare anomalie di modifica e garantire la consistenza dei dati contenuti al suo interno.

1 - Le dipendenze funzionali

In particolare, alla base del processo di normalizzazione si colloca il processo di rilevamento delle dipendenze funzionali, che permettono di capire i collegamenti tra i vari dati presenti all’interno di un database.

Definizione: vincolo locale di dipendenza funzionale

Data una relazione e due sottoinsiemi di attributi , il vincolo locale di dipendenza funzionale (o piΓΉ semplicemente dipendenza funzionale), denotato con (si legge determina ), Γ¨ soddisfatto se e solo se, per ogni coppia di tuple distinte in , se vale , allora vale anche :

Definizione: dipendenza funzionale non banale

Data una relazione e due sottoinsiemi di attributi , una dipendenza funzionale Γ¨ detta non banale se .

2.1 - Assiomi di Armstrong

Il matematico e informatico canadese William W. Armstrong nel 1974 ha proposto un insieme di assiomi che permettono di comprendere le implicazioni logiche che intercorrono tra dipendenze funzionali.

Definizione: assiomi di Armstrong

Gli assiomi di Armstrong (o regole di inferenza di Armstrong) sono un insieme di assiomi utilizzati per dedurre dipendenze funzionali a partire da un insieme dato di dipendenze funzionali in una relazione.

Essi sono tre: assioma di riflessivitΓ , assioma di aumento e assioma di transitivitΓ .

Assioma di riflessivitΓ  di Armstrong

Data una relazione e due sottoinsiemi di attributi , se Γ¨ sottoinsieme di , allora determina :

Assioma di aumento di Armstrong

Data una relazione e tre sottoinsiemi di attributi , se determina , allora 1 determina 1:

Assioma di transitivitΓ  di Armstrong

Data una relazione e tre sottoinsiemi di attributi , se determina e determina , allora determina :

2.1.1 - Regole di inferenza addizionali

Dagli assiomi di Armstrong vengono derivate altre regole di inferenza addizionali.

Regola di decomposizione

Data una relazione e tre sottoinsiemi di attributi , se determina 1, allora determina e :

Regola di composizione (o del prodotto)

Data una relazione e quattro sottoinsiemi di attributi , se determina e determina , allora 1 determina 1:

Regola di unione

Data una relazione e tre sottoinsiemi di attributi , se determina e , allora determina 1:

Regola di pseudo-transitivitΓ 

Data una relazione e quattro sottoinsiemi di attributi , se determina e 1 determina , allora 1 determina :

Regola di estensibilitΓ 

Data una relazione e due sottoinsiemi di attributi , se determina , allora determina 1:

Regola di monotonicitΓ 

Data una relazione e tre sottoinsiemi di attributi con , se determina , allora 1 determina :

Regola di auto-determinazione

Data una relazione e un sottoinsieme di attributi , determina se stesso:

2.2 - Gli attributi estranei

Definizione: attributo estraneo

Data una relazione con un insieme di dipendenze funzionali su e due sottoinsiemi di attributi , un attributo si dice estraneo nella dipendenza funzionale se è possibile ottenere anche senza il suo uso, utilizzando le restanti dipendenze funzionali in (cioè ) e la dipendenza modificata togliendo (cioè ):

2.3 - Chiusura di un insieme di dipendenze funzionali

Definizione: chiusura di un insieme di dipendenze funzionali

Data una relazione con un insieme di dipendenze funzionali su , una chiusura Γ¨ un insieme di dipendenze funzionali su tali che ogni Γ¨ derivabile da :

Osservazione: utilitΓ  della chiusura di un insieme di dipendenze funzionali

Conoscere la chiusura di un insieme di dipendenze funzionali significa conoscere tutte le dipendenze funzionali valide in perchΓ© sono deducibili a partire da quelle contenute in stesso.

Osservazione: crescita esponenziale della cardinalitΓ  di una chiusura

Una chiusura di un insieme di dipendenze funzionali puΓ² includere dipendenze del tipo su ogni possibile coppia di sottoinsiemi di attributi . Sappiamo che il numero di sottoinsiemi di possibili Γ¨ e, avendo questa possibilitΓ  sia per che per , abbiamo che il numero potenziale di dipendenze Γ¨ , che Γ¨ esponenziale nella dimensione dello schema .

Dunque, elencare o costruire tutte le dipendenze funzionali di Γ¨ computazionalmente impraticabile anche per schemi moderatamente grandi (per esempio, se , ci sono fino a possibili dipendenze funzionali).

2.4 - Equivalenza di insiemi di dipendenze funzionali

Osservazione: le dipendenze funzionali non sono uniche

In una relazione, non c’è unicitΓ  nelle dipendenze funzionali che possono essere soddisfatte in essa.

Questo concetto potrebbe sembrare molto banale, ma in realtΓ , grazie anche alla definizione formale di chiusura, ora possiamo caratterizzare dal punto di vista teorico il concetto di equivalenza tra insiemi di dipendenze funzionali.

Definizione: equivalenza di insiemi di dipendenze funzionali

Data una relazione con due insiemi e di dipendenze funzionali su , si dice equivalente a (e si denota "") se le loro chiusure e sono uguali:

Abbiamo ricondotto l’equivalenza ad un’uguaglianza insiemistica: se tutte le dipendenze derivate dall’insieme sono uguali a tutte le dipendenze derivate da , le due basi di dati evolvono allo stesso modo.

Tuttavia, come giΓ  detto, risulta perΓ² complesso costruire per intero le chiusure e per verificare l’equivalenza. Fortunatamente, esiste una proprietΓ  che porta al medesimo risultato.

ProprietΓ  dell'equivalenza di insiemi di dipendenze funzionali

Data una relazione con due insiemi e di dipendenze funzionali su , Γ¨ equivalente a se e solo se Γ¨ deducibile da e Γ¨ deducibile da :

2.5 - Chiusura di un insieme di attributi

Definizione: chiusura di un insieme di attributi

Data una relazione con un sottoinsieme di attributi su cui Γ¨ definito un insieme di dipendenze funzionali, una chiusura Γ¨ un insieme di attributi tali che la dipendenza funzionale Γ¨ deducibile da :

Algoritmo per il calcolo della chiusura di un insieme di attributi

Data una relazione con due sottoinsieme di attributi su cui Γ¨ definito un insieme di dipendenze funzionali, la chiusura Γ¨ calcolata nel seguente modo:

  1. Assegna a e a .
  2. Esiste in una dipendenza funzionale tale che ?
  3. Se sì, unisci a e rimuovi da .
  4. Se no, stop.

ProprietΓ  1 sulla chiusura di un insieme di attributi

Data una relazione con due sottoinsiemi di attributi su cui Γ¨ definito un insieme di dipendenze funzionali, la dipendenza funzionale Γ¨ deducibile da se e solo se Γ¨ un sottoinsieme di :

Osservazione: usare la proprietΓ  1 per verificare la validitΓ  delle dipendenze funzionali

Possiamo notare come, se una dipendenza funzionale Γ¨ deducibile da un insieme di dipendenze, allora Γ¨ valida. CiΓ² significa che Γ¨ possibile usare la proprietΓ  1 per verificare la validitΓ  di una dipendenza funzionale.

Una riformulazione che si trova spesso in giro della proprietΓ  1 Γ¨ quella che viene detta proprietΓ  di membership.

ProprietΓ  di membership sulla chiusura di un insieme di attributi

Data una relazione con due sottoinsiemi di attributi su cui Γ¨ definito un insieme di dipendenze funzionali, la dipendenza funzionale Γ¨ contenuta nella chiusura se e solo se Γ¨ un sottoinsieme di :

Osservazione: usare la proprietΓ  di membership per verificare la validitΓ  delle dipendenze funzionali

Similmente a quanto avviene per la proprietΓ  1, possiamo usare anche la proprietΓ  di membership, collegandoci a quanto detto sopra, per chiarire subito se una dipendenza Γ¨ valida o no semplicemente controllando se Γ¨ presente nella chiusura dell’insieme di dipendenze a cui si riferisce.

ProprietΓ  2 sulla chiusura di un insieme di attributi

Data una relazione con un sottoinsieme di attributi su cui sono definiti due insiemi e di dipendenze funzionali, le chiusure e sono uguali.

2.6 - Uso della dipendenza funzionale nelle superchiavi

Il concetto di dipendenza funzionale puΓ² essere usato per dare una nuova definizione di superchiave.

Definizione: superchiave

Data una relazione , un sottoinsieme di attributi è una superchiave se e solo se determina (cioè vale la dipendenza funzionale ).

Osservazione: verificare una superchiave con la sua chiusura

Data una relazione su cui Γ¨ definito un insieme di dipendenze funzionali, per verificare se un sottoinsieme di attributi Γ¨ una superchiave basterΓ  calcolare la sua chiusura e vedere se questa coincide con lo schema .

Osservazione: attributi fuori dall'insieme di dipendenze funzionali fanno parte della superchiave

Data una relazione su cui Γ¨ definito un insieme di dipendenze funzionali, se un attributo non Γ¨ determinato da nessuna dipendenza funzionale presente in , allora questo dovrΓ  necessariamente far parte della superchiave che si sta cercando.

2.7 - Le dipendenze ridondanti

Definizione: dipendenza ridondante

Data una relazione su cui Γ¨ definito un insieme di dipendenze funzionali, una dipendenza funzionale si dice che Γ¨ una dipendenza ridondante se, rimuovendola da , rimane comunque derivabile dalla chiusura delle altre dipendenze presenti:

Insieme in forma canonica

Definizione: insieme di dipendenze funzionali in forma canonica

Data una relazione su cui è definito un insieme di dipendenze funzionali, si dice che è in forma canonica se, per ogni dipendenza funzionale non banale (con ), è un singoletto, cioè un singolo attributo.

2.8 - Insieme di copertura minimale

Definizione: insieme di copertura minimale

Data una relazione su cui Γ¨ definito un insieme di dipendenze funzionali in forma canonica, un sottoinsieme si dice che Γ¨ un insieme di copertura minimale se, per ogni dipendenza funzionale non banale (con ):

  1. non contiene attributi estranei.
  2. non Γ¨ una dipendenza ridondante.

Algoritmo per il calcolo di un insieme di copertura minimale

Data una relazione su cui Γ¨ definito un insieme di dipendenze funzionali in forma canonica, questo algoritmo calcola l’insieme di copertura minimale .

I passi da seguire sono i seguenti:

  1. Assegna a :
  1. Per ogni dipendenza funzionale in e per ogni , se Γ¨ nella chiusura di tolto , allora cancella da :
  1. Per ogni dipendenza funzionale in , se Γ¨ nella chiusura di rispetto all’insieme di dipendenze funzionali, allora assegna a :

3 - Decomposizione di relazioni

Ora introduciamo un altro concetto alla base della normalizzazione: la decomposizione di una relazione.

Definizione: decomposizione

Data una relazione e un ricoprimento dello schema (cioΓ¨ e ), l’insieme di relazioni (dove ) Γ¨ una decomposizione di e ogni viene detto sottoschema di .

3.1 - Decomposizione senza perdita di informazioni

Definizione: decomposizione senza perdita di informazioni

Data una relazione su cui Γ¨ definito un insieme di dipendenze funzionali, una decomposizione di Γ¨ detta senza perdita di informazioni se si ha che:

A partire dalla nozione di decomposizione senza perdita di informazioni, possiamo ricavarci un importante teorema.

Teorema sulla decomposizione senza perdita di informazioni

Data una relazione su cui Γ¨ definito un insieme di dipendenze funzionali, una decomposizione di Γ¨ senza perdita di informazioni se si ha che l’intersezione determina o o :

Ovviamente, il teorema puΓ² facilmente essere riformulato sulla base della definizione di superchiave.

Corollario sulla decomposizione senza perdita di informazioni

Data una relazione su cui Γ¨ definito un insieme di dipendenze funzionali, una decomposizione di Γ¨ senza perdita di informazioni se si ha che l’intersezione Γ¨ superchiave o di o di .

3.2 - Restrizione di un insieme di dipendenze funzionali

Immaginiamo di avere una relazione su cui Γ¨ definito un insieme di dipendenze funzionali. Dopo aver decomposto questa relazione, vogliamo β€œdecomporre” anche l’insieme delle dipendenze funzionali sulle due decomposizioni: ecco il concetto di restrizione.

Definizione: restrizione di un insieme di dipendenze funzionali

Data una decomposizione di una relazione su cui Γ¨ definito un insieme di dipendenze funzionali, una restrizione di un sottoschema Γ¨ l’insieme di dipendenze funzionali contenute nella chiusura di che riguardano solo gli attributi :

3.3 - Decomposizione che mantiene le dipendenze

Dal concetto di restrizione si puΓ² ricavare quello di una decomposizione che β€œmantiene” le dipendenze.

Definizione: decomposizione che mantiene le dipendenze

Data una relazione su cui Γ¨ definito un insieme di dipendenze funzionali, una decomposizione di si dice che mantiene le dipendenze se Γ¨ deducibile dall’unione delle restrizioni ed (rispettivamente dei sottoschemi ed ):

3.4 - Decomposizione che mantiene la localitΓ  delle dipendenze

Possiamo ulteriormente approfondire il concetto di decomposizione che mantiene le dipendenze se teniamo conto del fatto che queste dipendenze funzionali possono essere verificate guardando solo una singola relazione della decomposizione, cioè non è necessario combinare tra loro più relazioni per controllarla.

Definizione: decomposizione che mantiene la localitΓ  delle dipendenze

Data una relazione su cui Γ¨ definito un insieme di dipendenze funzionali e un insieme di copertura minimale , una decomposizione che mantiene le dipendenze di si dice che mantiene la localitΓ  delle dipendenze se, per ogni dipendenza funzionale , esiste una relazione nella decomposizione che contiene gli attributi e :

4 - Forme normali

Esistono delle β€œricette” per la buona progettazione di una base di dati per limitare l’ammissibilitΓ  di dipendenze funzionali tra gli attributi, con l’obiettivo di eliminare o ridurre ridondanze e anomalie di modifica: le forme normali.

Definizione: forma normale

Una relazione su cui Γ¨ definito un insieme di dipendenze funzionali si dice essere in una forma normale se soddisfa i vincoli specifici di quella forma normale rispetto a . ^definizione-forma-normale

4.1 - 1Βͺ Forma Normale (1NF)

La 1Βͺ Forma Normale (1NF) si basa sull’uso di attributi con valori indivisibli, detti atomici.

Definizione: attributo atomico

Un attributo atomico Γ¨ un attributo di una relazione il cui dominio Γ¨ composto unicamente da valori indivisibili.

Definizione: 1Βͺ Forma Normale (1NF)

Una relazione si dice in 1Βͺ Forma Normale (1NF, 1Λ’α΅— Normal Form) se tutti i suoi attributi sono atomici.

4.2 - 2Βͺ Forma Normale (2NF)

Definizione: 2Βͺ Forma Normale (2NF)

Una relazione su cui Γ¨ definito un insieme di dipendenze funzionali si dice in 2Βͺ Forma Normale (2NF, 2ⁿᡈ Normal Form) se Γ¨ in 1Βͺ Forma Normale e ogni attributo non chiave non dipende da un sottoinsieme proprio di una chiave candidata :

4.3 - 3Βͺ Forma Normale (3NF)

Definizione: 3Βͺ Forma Normale (3NF)

Una relazione su cui Γ¨ definito un insieme di dipendenze funzionali si dice in 3Βͺ Forma Normale (3NF, 3ʳᡈ Normal Form) se Γ¨ in 2Βͺ Forma Normale e, per ogni dipendenza funzionale non banale (con e ) contenuta nella chiusura di , si verifica almeno una delle seguenti condizioni:

  1. Γ¨ una superchiave di .
  2. Γ¨ parte di almeno una chiave candidata.

4.3.1 - Algoritmo di normalizzazione in 3NF

Possiamo costruire un algoritmo che ci permette di normalizzare una relazione in 3NF attraverso dei passaggi ben definiti.

Algoritmo di normalizzazione di una relazione in 3NF

Durante l’esecuzione dell’algoritmo di normalizzazione di una relazione in 3NF, consideriamo una qualsiasi relazione risultante dal passo 2 del procedimento: questa relazione Γ¨ stata generata dalla dipendenza funzionale , quindi Γ¨ una superchiave di per la nuova definizione di superchiave, ma possiamo dimostrare che Γ¨ anche una chiave candidata di perchΓ© Γ¨ minimale.

ProprietΓ  di generazione di chiavi candidate dell'algoritmo di normalizzazione di una relazione in 3NF

Durante l’esecuzione dell’algoritmo di normalizzazione di una relazione in 3NF, per una qualsiasi relazione risultante dal passo 2 del procedimento, Γ¨ una chiave candidata di .

Dimostrazione della proprietΓ  di generazione di chiavi candidate dell'algoritmo di normalizzazione di una relazione in 3NF

Facciamo una dimostrazione per assurdo.

Supponiamo che sia solo superchiave di (e che quindi non sia minimale), ciΓ² vuol dire che esiste un sottoinsieme proprio tale che . Allora, per l’assioma di riflessivitΓ , abbiamo che e, per l’assioma di transitivitΓ , se e , allora .

CiΓ² implica che quindi sia una dipendenza ridondante perchΓ© Γ¨ derivabile da queste altre dipendenze funzionali, ma ciΓ² non Γ¨ possibile perchΓ© dal passo 1 dell’algoritmo di normalizzazione in 3NF otteniamo un insieme di copertura minimale in cui non sono presenti dipendenze funzionali.

Di conseguenza, non puΓ² esistere e deve essere per forza minimale, quindi Γ¨ una chiave candidata.

ProprietΓ  di mantenimento della localitΓ  delle dipendenze dell'algoritmo di normalizzazione di una relazione in 3NF

Durante l’esecuzione dell’algoritmo di normalizzazione di una relazione in 3NF, ogni dipendenza funzionale risultante dal passo 1 del procedimento si trova nella restrizione della corrispondente relazione per costruzione, quindi la decomposizione Γ¨ una decomposizione che mantiene la localitΓ  delle dipendenze.

ProprietΓ  di mantenimento di informazioni dell'algoritmo di normalizzazione di una relazione in 3NF

L’esecuzione dell’algoritmo di normalizzazione di una relazione in 3NF su una relazione genera una decomposizione che Γ¨ senza perdite di informazioni, ossia:

4.4 - Forma Normale di Boyce-Codd (BCNF)

Definizione: Forma Normale di Boyce-Codd (BCNF)

Una relazione su cui Γ¨ definito un insieme di dipendenze funzionali si dice in Forma Normale di Boyce-Codd (BCNF, Boyce-Codd Normal Form) se Γ¨ in 3Βͺ Forma Normale e, per ogni dipendenza funzionale non banale (con ) contenuta nella chiusura di , Γ¨ una superchiave.

Osservazione: la BCNF Γ¨ una restrizione sulla condizione 1 della 3NF

Osservando la definizione della BCNF, si puΓ² osservare come questa sia una β€œrestrizione” sulla condizione 1 della 3NF, nel senso che, mentre nella 3NF viene richiesto che la relazione rispetti almeno una delle due condizioni, nella BCNF si chiede che la condizione 1 venga necessariamente rispettata.

Osservazione: la BCNF impedisce le anomalie di modifica

La normalizzazione di una relazione in BCNF elimina la possibilitΓ  di avere anomalie di modifica di qualsiasi tipo: questo accade perchΓ©, in ogni dipendenza funzionale non banale , si ha che Γ¨ una superchiave che, per definizione, impedisce la ridondanza e assicura che ogni dato sia rappresentato una sola volta.

Bisogna sottolineare perΓ² che, ovviamente, ciΓ² vale solo all’interno delle singole relazioni, non globalmente all’interno dell’intera base di dati.

4.4.1 - Algoritmo di normalizzazione in BCNF

Algoritmo di normalizzazione di una base di dati in BCNF

Input: base di dati composto dalle relazioni su ognuna delle quali Γ¨ definito l’insieme di dipendenze funzionali .

Output: con le relazioni tutte in BCNF.

  1. Cercare all’interno di una relazione non in BCNF, ossia cercare nel corrispondente insieme di dipendenze funzionali una dipendenza funzionale non banale (con ) tale che non Γ¨ superchiave di .
  2. Se non esiste una del genere, allora l’algoritmo termina (perchΓ© sarΓ  giΓ  in BCNF).
  3. Se esiste, modificare :
  4. Eliminare la relazione da :
  1. Aggiungere a due nuove relazioni:
    • La relazione (dal cui schema rimuovere ) su cui Γ¨ definita la restrizione di in :
  2. Ricominciare dal passo 1.

Osservazione: l'algoritmo produce una decomposizione senza perdita di informazioni

L’algoritmo di normalizzazione di una base di dati in BCNF produce una decomposizione senza perdita di informazioni, dimostrabile tramite il teorema: infatti, viene decomposto in e, dato che (proprio perchΓ© ), l’intersezione determina (cioΓ¨ vale ).

Osservazione: la terminazione dell'algoritmo Γ¨ garantita

Ci sono condizioni per cui, usando l’algoritmo di normalizzazione di una base di dati in BCNF, si entra in un loop senza fine? No, la terminazione Γ¨ garantita dal passo di decomposizione, infatti:

  1. Consideriamo la relazione in 3NF ma non in BCNF su cui Γ¨ definito un insieme di dipendenze funzionali.
  2. Eseguendo l’algoritmo, prendiamo in considerazione la dipendenza funzionale non banale (con ) su cui effettuiamo la decomposizione .
  3. Consideriamo il grado delle relazioni : abbiamo banalmente che , cioè ha sicuramente meno attributi di . Possiamo confermare però che anche ha meno attributi di (cioè )?
  4. Partiamo dall’ipotesi che e, dato che allora .
  5. Abbiamo perΓ² che la dipendenza funzionale non banale per la regola di estensibilitΓ  implica e, avendo , abbiamo che .
  6. Con possiamo dire che, per definizione, Γ¨ una superchiave perchΓ© determina l’intero schema, ma abbiamo una contraddizione perchΓ© siamo partiti dal presupposto che non fosse in BCNF perchΓ©, nella dipendenza funzionale non banale , non Γ¨ una superchiave.
  7. Abbiamo quindi che i gradi di ed sono strettamente minori di quello di (cioΓ¨ e ), quindi dopo ripetute iterazioni dell’algoritmo di normalizzazione ci ritroveremo man mano con relazioni con sempre meno attributi, fino ad arrivare una relazione del tipo (dove e sono due singoli attributi).
  8. Le dipendenze funzionali di dovranno essere necessariamente della forma o , analizziamo entrambi i casi:
  1. In entrambi i casi, l’unica dipendenza funzionale di avrΓ  come determinante una superchiave, rispettando cosΓ¬ le condizioni della BCNF.

Abbiamo visto quindi come, iterando l’algoritmo di normalizzazione, arriveremo necessariamente prima o poi a una relazione in BCNF.

4.5 - 4Βͺ Forma Normale (4NF)

4.6 - 5Βͺ Forma Normale o Forma Normale di Proiezione-Join (5NF o PJNF)

4.7 - 6Βͺ Forma Normale o Forma Normale di Dominio-Chiave (6NF o DKNF)


Approfondimento

Fonti:

Footnotes

  1. Questa Γ¨ la notazione per l’unione di attributi. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10

  2. Ricordiamo che, nel caso della proiezione, puΓ² esserci un collasso delle tuple duplicate. ↩ ↩2 ↩3 ↩4