Premessa
Portale di appartenenza: Basi di dati.
Cosa troverai in questa nota:
- La normalizzazione e del vincolo locale di dipendenza funzionale.
- Gli assiomi di Armstrong con le relative regole di inferenza derivanti.
- I concetti collegati alle dipendenze funzionali come la chiusura di un insieme di dipendenze funzionali e la chiusura di un insieme di attributi e come essi possano essere usati nella progettazione delle relazioni.
- La decomposizione di una relazione, i vari tipi (senza perdita di informazioni e che mantiene le dipendenze) e le relative restrizioni.
- Le forme normali (1NF, 2NF, 3NF e BCNF).
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 :
Esempio di dipendenze funzionali
Consideriamo la relazione con la seguente istanza:
Possiamo per esempio chiederci: vale la dipendenza funzionale ? Per verificarlo, applichiamo la definizione e verifichiamo se, per ogni coppia di tuple distinte in vale:
Vediamo che, per esempio, nella prima e nellβultima tupla il valore di Γ¨ e in hanno entrambe valore . Allo stesso tempo, le altre due tuple hanno lo stesso valore in (cioΓ¨ ) e in corrisponde (). Possiamo quindi confermare che Γ¨ una dipendenza funzionale.
Possiamo ora chiederci: vale la dipendenza funzionale ? In questo caso, dobbiamo verificare che:
Possiamo notare che le ultime due tuple hanno lo stesso valore in (cioè ), ma i valori in non corrispondono: ciò significa che la dipendenza funzionale non può essere valida.
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
Assioma di transitivitΓ di Armstrong
2.1.1 - Regole di inferenza addizionali
Dagli assiomi di Armstrong vengono derivate altre regole di inferenza addizionali.
Regola di decomposizione
Regola di composizione (o del prodotto)
Regola di unione
Regola di pseudo-transitivitΓ
Regola di estensibilitΓ
Regola di monotonicitΓ
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è ):
Esempio di attributo estraneo
Consideriamo la relazione con lβinsieme di dipendenze funzionali
Esaminiamo la dipendenza per verificare se Γ¨ un attributo estraneo attraverso la sua definizione:
Calcoliamo prima , cioΓ¨ lβinsieme di dipendenze funzionali privato della dipendenza che stiamo esaminando:
Ora calcoliamo , cioè la dipendenza modificata togliendo quello che vogliamo provare essere un attributo estraneo:
Ora chiediamoci: Γ¨ possibile dedurre dallβunione di e ?
Questo Γ¨ vero, perchΓ© implica per la regola di monotonicitΓ , quindi possiamo concludere che Γ¨ estraneo nella dipendenza funzionale .
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 :
Esempio di chiusura di un insieme di dipendenze funzionali
Consideriamo una relazione con lβinsieme di dipendenze funzionali
Un esempio di una sua chiusura , ovvero di un insieme di tutte le dipendenze funzionali che si possono derivare logicamente da , puΓ² essere la seguente:
Possiamo notare infatti come ogni Γ¨ derivabile da :
- : derivabile secondo lβassioma di transitivitΓ :
- : derivabile secondo la regola di estensibilitΓ :
- : derivabile secondo lβassioma di aumento:
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.
Esempio di non-unicitΓ delle dipendenze funzionali
Consideriamo la relazione con la seguente istanza:
Posso considerare due insiemi diversi di dipendenze funzionali che agiscono su questa relazione:
Questi due insiemi sono ugualmente validi e dipendono solamente dal punto di vista del progettista che sceglie come descrivere le dipendenze funzionali che insistono su questa relazione.
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 :
Esempio di equivalenza di insiemi di dipendenze funzionali
Consideriamo una relazione con due insiemi di dipendenze funzionali:
- .
- .
Per verificare lβequivalenza , dobbiamo verificare se ogni Γ¨ deducibile da e, viceversa, se ogni Γ¨ deducibile da .
Verifichiamo il primo caso ():
- : deducibile per la regola di unione.
Ora verifichiamo il secondo caso ():
- : deducibile per la regola di decomposizione.
- : deducibile per la regola di decomposizione.
Abbiamo concluso che e e, per la proprietΓ dellβequivalenza di insiemi di dipendenze funzionali, possiamo confermare che vale lβequivalenza .
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 :
Esempio di chiusura di un insieme di attributi
Consideriamo una relazione con lβinsieme di dipendenze funzionali
e considero .
Una possibile chiusura di Γ¨:
Infatti, per ogni attributo in , la dipendenza funzionale Γ¨ deducibile da :
- : Γ¨ deducibile perchΓ© Γ¨ giΓ un elemento di .
- : Γ¨ deducibile perchΓ© Γ¨ giΓ un elemento di .
Possiamo confermare che la chiusura Γ¨ valida.
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:
- Assegna a e a .
- Esiste in una dipendenza funzionale tale che ?
- Se sì, unisci a e rimuovi da .
- Se no, stop.
Esempio di uso dell'algoritmo per il calcolo della chiusura di un insieme di attributi
Consideriamo una relazione con lβinsieme di dipendenze funzionali
e considero . Proviamo a calcolare la chiusura usando lβalgoritmo per il calcolo della chiusura di un insieme di attributi:
- Passo 1: e .
- Passo 2: in cβΓ¨ la dipendenza funzionale (dove e ).
- Passo 3: e .
- Passo 2: in cβΓ¨ la dipendenza funzionale (dove e ).
- Passo 3: e .
- Passo 2: in cβΓ¨ la dipendenza funzionale (dove e ).
- Passo 3: e .
- Passo 2: in non ci sono piΓΉ dipendenze funzionali valide.
Dopo aver eseguito lβalgoritmo, abbiamo trovato che la chiusura contiene i seguenti attributi:
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.
Esempio di uso della proprietΓ 1 per verificare la validitΓ delle dipendenze funzionali
Consideriamo una relazione con lβinsieme di dipendenze funzionali
Vogliamo verificare la validitΓ della dipendenza (quindi e ). Per fare ciΓ², dobbiamo calcolare la chiusura e verificare se in essa Γ¨ presente . Nellβesempio precedente avevamo giΓ calcolato questa chiusura e abbiamo ottenuto:
Dal momento che , possiamo confermare che la dipendenza Γ¨ valida.
Vogliamo ora verificare la validitΓ della dipendenza (quindi e ). Per fare ciΓ², dobbiamo calcolare la chiusura e verificare se in essa Γ¨ presente . Applicando lβalgoritmo, notiamo subito che stavolta la chiusura contiene solo (perchΓ© non ci sono dipendenze con attributi deducibili unicamente da ).
Dal momento che , la dipendenza NON Γ¨ valida.
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 .
Esempio di verifica di una superchiave con la sua chiusura
Consideriamo una relazione con lβinsieme di dipendenze funzionali
Vogliamo verificare se il sottoinsieme di attributi Γ¨ una superchiave di . Per fare ciΓ², dobbiamo calcolare la chiusura e verificare se essa Γ¨ uguale allo schema . Usando lβalgoritmo, possiamo calcolare subito la chiusura che risulta essere:
Dal momento che Γ¨ proprio lo schema della relazione , possiamo confermare che il sottoinsieme di attributi Γ¨ una superchiave di .
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.
Esempio di attributo fuori dall'insieme di dipendenze funzionali che fa parte della superchiave
Consideriamo una relazione con lβinsieme di dipendenze funzionali
Vogliamo verificare se il sottoinsieme di attributi Γ¨ una superchiave di . Per fare ciΓ², dobbiamo calcolare la chiusura e verificare se essa Γ¨ uguale allo schema . Usando lβalgoritmo, possiamo calcolare subito la chiusura che risulta essere:
Possiamo notare che in non Γ¨ presente alcuna dipendenza funzionale che determina e, per questo, non fa parte della chiusura .
Per rendere la chiusura una superchiave, bisogna includere anche in : infatti, se , allora che corrisponde allo schema di e rende una superchiave.
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 ):
- non contiene attributi estranei.
- 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:
- Assegna a :
- Per ogni dipendenza funzionale in e per ogni , se Γ¨ nella chiusura di tolto , allora cancella da :
- 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
Esempio di decomposizione
Consideriamo una relazione . Una sua decomposizione potrebbe essere:
Infatti, che corrisponde proprio allo schema della relazione. In particolare:
- Il sottoschema corrisponde alla proiezione .
- Il sottoschema corrisponde alla proiezione .
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:
Esempio di decomposizione senza perdita di informazioni
Consideriamo una relazione con lβinsieme di dipendenze funzionali
e consideriamo la sua istanza che soddisfa le dipendenze funzionali contenute in (infatti a ogni matricola corrisponde sempre lo stesso nome):
Consideriamo la decomposizione
dove il sottoschema rappresenta la proiezione 2:
e il sottoschema rappresenta la proiezione 2:
Se effettuiamo il natural-join tra il due sottoschemi ed otteniamo:
Questa istanza corrisponde proprio allβistanza della relazione da cui siamo partiti, quindi si puΓ² concludere che la decomposizione Γ¨ senza perdita di informazioni.
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 :
Esempio di uso del teorema sulla decomposizione senza perdita di informazioni
Consideriamo una relazione con lβinsieme di dipendenze funzionali
e consideriamo la sua istanza che soddisfa le dipendenze funzionali contenute in (infatti a ogni matricola corrisponde sempre lo stesso nome):
Consideriamo la decomposizione
dove il sottoschema rappresenta la proiezione 2:
e il sottoschema rappresenta la proiezione 2:
Secondo il teorema, se lβintersezione puΓ² determinare o a partire da , allora questa decomposizione Γ¨ senza perdita di informazioni.
Verifichiamo prima :
- Abbiamo la dipendenza giΓ presente in .
- Avendo dal passaggio precedente, ricaviamo per la regola di estensibilitΓ .
Abbiamo verificato, quindi, che (cioè che ): possiamo quindi confermare che la decomposizione è senza perdita di informazioni.
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 :
Esempio di restrizione di un insieme di dipendenze funzionali
Consideriamo una relazione con lβinsieme di dipendenze funzionali
Gli elementi della chiusura di sono:
Ora decomponiamo in
Calcoliamo la restrizione sul sottoschema a partire dagli elementi della chiusura :
- : β puΓ² essere un elemento di perchΓ© .
- : β non puΓ² essere un elemento di perchΓ© .
- : β non puΓ² essere un elemento di perchΓ© .
- E così via per tutti gli altri elementi non elencati della chiusura .
Quindi possiamo concludere che la restrizione sul sottoschema Γ¨:
Ora calcoliamo la restrizione sul sottoschema a partire dagli elementi della chiusura :
- : β non puΓ² essere un elemento di perchΓ© .
- : β puΓ² essere un elemento di perchΓ© .
- : : β non puΓ² essere un elemento di perchΓ© .
Quindi possiamo concludere che la restrizione sul sottoschema Γ¨:
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 ):
Esempio di decomposizione che mantiene le dipendenze
Consideriamo una relazione con lβinsieme di dipendenze funzionali
Gli elementi della chiusura di sono:
Ora decomponiamo in
Troviamo che la restrizione sul sottoschema Γ¨:
Mentre, la restrizione sul sottoschema Γ¨:
Facendo lβunione delle due restrizioni ed , abbiamo:
Possiamo facilmente verificare che da Γ¨ deducibile lβinsieme di dipendenze funzionali perchΓ© lβunico elemento mancante, , Γ¨ deducibile dallβassioma di transitivitΓ :
Si puΓ² quindi dire che la decomposizione di mantiene le dipendenze.
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
Esempi di attributi atomici
Consideriamo una relazione . Supponiamo che i domini dei suoi attributi siano i seguenti:
- di tipo intero (numero identificativo univoco).
- di tipo stringa (stringa che rappresenta nome e cognome).
- di tipo stringa (nome di un singolo insegnamento).
Se ogni attributo assume un solo valore indivisibile per ogni tupla, allora tali attributi sono atomici.
Ad esempio, lβistanza:
contiene solo attributi atomici, in quanto:
- Γ¨ un singolo numero (intero).
- Γ¨ una stringa indivisibile nel contesto.
- Γ¨ una singola unitΓ di informazione.
Se invece contenesse un insieme di valori, come , oppure fosse codificato come una struttura
{"nome": "Mario", "cognome": "Rossi"}, gli attributi non sarebbero piΓΉ atomici.
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 :
Esempio di relazione in 2Βͺ Forma Normale (2NF)
Consideriamo la seguente relazione:
e lβinsieme di dipendenze funzionali:
Possiamo considerare la chiave candidata . In questo caso, le dipendenze e indicano che gli attributi non chiave e dipendono solo da una parte della chiave (cioè rispettivamente solo da e da ), quindi questa relazione viola la 2NF.
Si puΓ² perΓ² decomporre nelle seguenti tre relazioni:
- con la restrizione e chiave candidata .
- con la restrizione e chiave candidata .
- con la restrizione e chiave candidata .
In questa nuova decomposizione, ogni attributo non chiave dipende interamente dalla chiave candidata e, quindi, ognuna di queste tre nuove relazioni Γ¨ in 2NF.
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:
- Γ¨ una superchiave di .
- Γ¨ parte di almeno una chiave candidata.
Esempio di relazione in 3Βͺ Forma Normale (3NF)
Consideriamo la relazione:
su cui Γ¨ definito il seguente insieme di dipendenze funzionali:
Considerando come chiave candidata , la relazione Γ¨ in 2NF perchΓ© ogni attributo non chiave dipende interamente dalla chiave candidata.
Tuttavia, la relazione viola la 3NF perchΓ© (considerando solo le dipendenze funzionali di e tralasciando quelle della sua chiusura per questioni pratiche):
- Lβattributo non Γ¨ una superchiave (perchΓ© non determina lβintero schema della relazione), violando cosΓ¬ la condizione 1 della definiizone della 3NF.
- Gli attributi , e non fanno parte di almeno una chiave candidata, essendo questa composta unicamente da e violando così la condizione 2 della definiizone della 3NF.
Si puΓ² perΓ² decomporre nelle seguenti due relazioni:
- con la restrizione e chiave candidata .
- con la restrizione e chiave candidata .
In questa nuova decomposizione, per ogni dipendenza funzionale non banale contenuta nella chiusura di , viene rispettata la condizione 1 della definizione secondo cui Γ¨ una superchiave di (infatti, e sono anche chiavi candidate dei rispettivi sottoschemi e per definizione di chiave candidata sono anche superchiavi).
Quindi, possiamo concludere che ognuna di queste due nuove relazioni Γ¨ in 3NF.
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
- Input: una relazione su cui Γ¨ definito lβinsieme di dipendenze funzionali.
- Output: una base di dati con relazioni in 3NF che corrisponde a una decomposizione senza perdita di informazioni di .
- Procedimento:
- Calcolo lβinsieme di copertura minimale di :
- Costruisco una base di dati con
- Se nessuna relazione contiene una chiave candidata qualsiasi di , aggiungo a una nuova relazione :
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.
Esempio di relazione in Forma Normale di Boyce-Codd (BCNF)
Consideriamo la relazione:
su cui Γ¨ definito il seguente insieme di dipendenze funzionali:
Considerando come chiave candidata , la relazione Γ¨ in 3NF perchΓ© ogni attributo non chiave (in questo caso solo ) dipende interamente dalla chiave candidata.
Tuttavia, la relazione viola la BCNF perchΓ© lβattributo non Γ¨ una superchiave (perchΓ© non determina lβintero schema della relazione).
Si puΓ² perΓ² decomporre nelle seguenti due relazioni:
- con la restrizione e chiave candidata .
- con la restrizione e chiave candidata .
In questa nuova decomposizione, per ogni dipendenza funzionale non banale contenuta nella chiusura di , Γ¨ una superchiave di (infatti, Γ¨ chiave candidata del sottoschema e, per definizione di chiave candidata, Γ¨ anche una superchiave).
Quindi, possiamo concludere che ognuna di queste due nuove relazioni Γ¨ in BCNF.
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.
- 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 .
- Se non esiste una del genere, allora lβalgoritmo termina (perchΓ© sarΓ giΓ in BCNF).
- Se esiste, modificare :
- Eliminare la relazione da :
- Aggiungere a due nuove relazioni:
- La relazione (dal cui schema rimuovere ) su cui Γ¨ definita la restrizione di in :
- La relazione (con schema lβunione di e ) su cui Γ¨ definita la restrizione di in :
- 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 ).
Esempio di uso dell'algoritmo di normalizzazione di una base di dati in BCNF
Consideriamo la base di dati composta dalle seguenti relazioni:
- La relazione con chiave candidata su cui Γ¨ definito il seguente insieme di dipendenze funzionali: Possiamo confermare che Γ¨ in 3NF perchΓ© ogni attributo non chiave (in questo caso solo ) dipende interamente dalla chiave candidata, ma non Γ¨ in BCNF perchΓ© non tutte le dipendenze funzionali non banali (con ) sono tali che Γ¨ superchiave (in questo caso, per la dipendenza , non Γ¨ superchiave).
- La relazione con chiave candidata su cui Γ¨ definito il seguente insieme di dipendenze funzionali: Possiamo confermare che Γ¨ in 3NF perchΓ© ogni attributo non chiave (in questo caso ) dipende interamente dalla chiave candidata, ma non Γ¨ in BCNF perchΓ© non tutte le dipendenze funzionali non banali (con ) sono tali che Γ¨ superchiave (in questo caso, per le dipendenze e , e non sono superchiavi).
- La relazione con chiave candidata su cui Γ¨ definito il seguente insieme di dipendenze funzionali: Possiamo confermare che Γ¨ in 3NF perchΓ© ogni attributo non chiave (in questo caso ) dipende interamente dalla chiave candidata, ed Γ¨ anche in BCNF perchΓ© tutte le dipendenze funzionali non banali (con ) sono tali che Γ¨ superchiave (infatti Γ¨ superchiave).
Possiamo quindi usare lβalgoritmo per normalizzare la base di dati in BCNF:
- Passo 1: allβinterno di possiamo prendere la relazione che non Γ¨ in BCNF, in particolare prendendo la dipendenza funzionale non banale in cui non Γ¨ superchiave.
- Passo 3: elimino la relazione da e ci aggiungo la decomposizione in cui i due sottoschemi hanno rispettivamente come restrizioni e , quindi ora conterrΓ le seguenti relazioni con i rispettivi insiemi di dipendenze funzionali:
- Passo 1: allβinterno di possiamo prendere la relazione che non Γ¨ in BCNF, in particolare prendendo la dipendenza funzionale non banale in cui non Γ¨ superchiave.
- Passo 3: elimino la relazione da e ci aggiungo la decomposizione in cui i due sottoschemi hanno rispettivamente come restrizioni e , quindi ora conterrΓ le seguenti relazioni con i rispettivi insiemi di dipendenze funzionali:
- Passo 2: non ci sono piΓΉ relazioni nella base di dati che non siano in BCNF.
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:
- Consideriamo la relazione in 3NF ma non in BCNF su cui Γ¨ definito un insieme di dipendenze funzionali.
- Eseguendo lβalgoritmo, prendiamo in considerazione la dipendenza funzionale non banale (con ) su cui effettuiamo la decomposizione .
- Consideriamo il grado delle relazioni : abbiamo banalmente che , cioè ha sicuramente meno attributi di . Possiamo confermare però che anche ha meno attributi di (cioè )?
- Partiamo dallβipotesi che e, dato che allora .
- Abbiamo perΓ² che la dipendenza funzionale non banale per la regola di estensibilitΓ implica e, avendo , abbiamo che .
- 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.
- 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).
- Le dipendenze funzionali di dovranno essere necessariamente della forma o , analizziamo entrambi i casi:
- Se abbiamo la dipendenza , per la regola di estensibilitΓ abbiamo e, dato che determina lβintero schema, per definizione avremo che sarΓ una superchiave.
- Viceversa, se abbiamo la dipendenza , per la regola di estensibilitΓ abbiamo e, dato che determina lβintero schema, per definizione avremo che sarΓ una superchiave.
- 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:
- π« Lezioni e slide del Prof. Pensa Ruggero Gaetano del corso di Basi di Dati (canale B), Corso di Laurea in Informatica presso lβUniversitΓ di Torino, A.A. 2024-25: