uni
Una dipendenza funzionale (FD) esprime un legame semantico tra due gruppi di attributi di uno schema di relazione . Una FD è una proprietà di non di una di e perciò non può essere dedotta da una ma deve essere dedotta da qualcuno che conosce la semantica degli attributi di .

Vengono anche usate per verificare la presenza di anomalie e per la Normalizzazione. Con intendiamo uno schema di relazione che verifica un insieme di dipendenza funzionali .

Definizione formale

Esiste in su una FD da due sottoinsiemi non vuoti di , da a se per ogni coppia di tuple e di con gli stessi valori su , risulta che e hanno gli stessi valori anche su , e si scrive (che NON implica ).

In breve: Dati due insiemi di attributi e , si dice che determina () se e solo se date due tuple distinte e , se allora .
Se : se due tuple hanno un valore uguale in , lo hanno anche in .

Questa definizione non è direttamente utilizzabile nella pratica perché prevede una quantificazione universale sulle istanze del Database.
Non abbiamo un algoritmo capace di calcolare tutte le FD implicate da un insieme .


Dipendenze Funzionali Particolari

  • Una FD è completa quando e, per ogni , non vale
  • se è una superchiave (Chiave e Superchiave) di , allora determina ogni altro attributo della relazione, quindi .
  • se è una chiave, allora è una dipendenza funzionale completa
  • una FD è banale se è sempre soddisfatta, eg:
    1. è banale
    2. è non banale se
    3. è non banale se nessun attributo di appartiene a
      Esempio: relazione (Impiegato, stipendio, progetto, bilancio, funzione)
      ogni impiegato ha un solo stipendio: , impiegato non è chiave quindi ci sono ripetizioni
      ogni impiegato ha una sola funzione per progetto: , imp e prog sono chiave quindi niente ripetizioni.

Regole di inferenza d Armstrong

Armstrong ha fornito delle regole di inferenza che permettono di derivare costruttivamente tutte le FD implicate da un dato insieme iniziale.

  1. Riflessività:
    Se allora
  2. Additività o Arricchimento:
    Se allora per qualunque
  3. Transitività:
    Se e allora

Calcolo delle chiavi con dipendenze funzionali

Definizione di chiave e superchiave tramite il concentto di Dipendenza Funzionale:

Dato uno schema , un insieme di attributi si dice superchiave di se .
Un insieme di attributi si dice chiave di se è una superchiave di e se non esiste alcun sottoinsieme proprio di che sia superchiave di .

Trovare tutte le chiavi di ha complessità esponenziale nel caso peggiore:

  • Gli attributi che stanno solo a sinistra stanno in tutte le chiavi, chiamiamo questo insieme
  • quelli che stanno solo a destra non stanno in nessuna chiave
  • si aggiunge a un attributo ala volta tra quelli che non stanno solo a destra, poi una coppia di attributi e così via… Chiamiamo questo sottoinsieme di attributi, ogni volta si controlla se la FD esiste

Verificare una chiave

Per verificare se un insieme di attributi è chiave o superchiave possiamo usare l’algoritmo per il calcolo della chiusura di un insieme di attributi ([[Dipendenza Funzionale#calcolo-di-x-|Calcolo di ]]).

  • è superchiave di se e solo se , ovvero se e solo se
  • è chiave di se e solo se , e non esiste tale che

Derivazione

Una derivazione di (FD) da (insieme di FD) secondo (regole di inferenza) è una sequenza finita dove:

  • ogni è un elemento di oppure è ottenuta dalle precedenti FD della derivazione usando una delle
    E indichiamo con il fatto che la FD sia derivabile da usando .

Regole di derivazione comuni

  • Unione:
  • Decomposizione:
  • Indebolimento:
  • Identità:

Chiusura di un insieme di attributi

Dato uno schema con , la chiusura di rispetto a è definita come:

Se non vi sono ambiguità per semplicità scriviamo .

Teorema della chiusura degli attributi

Correttezza e Completezza

è corretto se : applicando ad un insieme di di FD si ottengono solo dipendenze logicamente implicate da .
è completo se : applicando ad un insieme di FD si ottengono tutte le dipendenze logicamente implicate da .

Teorema

Le regole di inferenza di Armstrong sono corrette e complete.
Questo teorema ci permette di scambiare (soddisfa) con (implica) ovunque, in particolare nella definizione di chiusura degli attributi.
Si può dimostrare che le regole di inferenza di Armstrong sono minimali, cioè ignorandone anche solo una di esse, l’insieme di regole che rimane non è più completo.

Chiusura di un insieme di dipendenza funzionali

Sia definito su , la chiusura di è l’insieme di tutte le FD implicate da :

Dato un insieme definite su , un’istanza di che soddisfa soddisfa anche le FD di .

Calcolo di

per calcolare possiamo usare le regole di inferenza di Armstrong:
Input:
Output:

while ( non cambia) do
for each do
applicare riflessività ed additività a e aggiungere a le dipendenze ottenute
for each £f_1,f_2 \in F^+__do__ se possibile, applicare transitività af_1f_2F^+la dipendenza ottenuta. __return__F^+$

Calcolo di

Il calcolo di è molto costoso poiché ha una complessità esponenziale. Spesso però invece ci interessa verificare se contiene una certa FD, non generare l’intera chiusura, per fare ciò basta calcolare per il teorema di chiusura degli attributi:
Input:
Output:

while ( non cambia) do
for each do
if and then

return

Equivalenza

Due insiemi e di FD sugli attributi di una relazione sono equivalenti, in simboli , se e solo se . A quel punto si dice che è una copertura di e viceversa.
L’equivalenza ci permette di stabilire se due schemi di relazione rappresentano gli stessi fatti: basta che abbiano gli stessi attributi e FD equivalenti.
Per verificare l’equivalenza è sufficiente che:

  • tutte le FD di appartengano a
  • tutte le FD di appartengano a

Ridondanza

Sia un insieme di FD, data , contiene un attributo estraneo se e solo se .
è una FD ridondante se e solo se
Le FD che NON contengono attributi estranei e la cui parte destra è un unico attributo, sono dette FD elementari.

Copertura Minimale

Sia un insieme di FD, è una copertura minimale se e solo se:

  • ogni parte destra di una FD ha un unico attributo
  • le FD non contengono attributi estranei
  • non esistono dipendenze ridondanti
    quindi se e solo sono tutte FD elementari non ridondanti.
    Ogni tanto una copertura minimale viene chiamata insieme minimale oppure copertura canonica.
    Per trovare la copertura minimale di un basta scomporre le FD: da passi a

Teorema

Per ogni insieme di FD esiste una copertura minimale (il teorema non dice nulla sull’unicità della cop. min.).

Calcolo della copertura minimale

input: insieme di FD
output: copertura minimale di

for each do

for each do
if then


for each then

return