Premessa
Portale di appartenenza: Basi di dati.
Cosa troverai in questa nota:
- Unβintroduzione al concetto di normalizzazione e del vincolo locale di dipendenza funzionale.
- Una presentazione degli assiomi di Armstrong con le relative regole di inferenza derivanti.
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, denotato con 1, Γ¨ 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.
2 - 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 - 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 algoritmi
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 .
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.
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, per ogni istanza di che soddisfa le dipendenze funzionali contenute in , si ha che3:
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 4:
e il sottoschema rappresenta la proiezione 4:
Se effettuiamo il natural-join tra il due sottoschemi ed otteniamo:
Questa istanza corrisponde proprio allβistanza di partenza, 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, per ogni istanza di che soddisfa le dipendenze funzionali contenute in , 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 4:
e il sottoschema rappresenta la proiezione 4:
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, per ogni istanza di che soddisfa le dipendenze funzionali contenute in , 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 Γ¨:
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.
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 .
4.1 - 1Βͺ Forma Normale (1NF)
4.2 - 2Βͺ Forma Normale (2NF)
4.3 - 3Βͺ Forma Normale (3NF)
4.4 - Forma Normale di Boyce-Codd (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)
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:
Footnotes
-
Si legge β determina β. β©
-
Questa Γ¨ la notazione per lβunione di attributi. β© β©2 β©3 β©4 β©5 β©6 β©7 β©8 β©9 β©10
-
Qua Γ¨ stato usato lβabuso di notazione sulle istanze, per cui Γ¨ stato dato come argomento allβoperatore di proiezione lβistanza e non la relazione a cui si riferisce, cosΓ¬ come viene considerato come risultato del natural-join unβistanza e non una relazione. β©
-
Ricordiamo che, nel caso della proiezione, puΓ² esserci un collasso delle tuple duplicate. β© β©2 β©3 β©4