bisogna formalizzare il concetto di decomposizione che preserva un insieme di dipendenze funzionali.

definizione di decomposizione

Sia uno schema di relazione. Una decomposizione di è una famiglia di sottoinsiemi di che ricopre , ovvero:

  • essenzialmente, decomporre significa definire dei sottoschemi che contengono ognuno un sottoinsieme degli attributi di .

La proiezione di su un certo elemento contiene:

  • le dipendenze funzionali di la cui unione di determinante e determinato fa parte di (quindi le dipendenze con elementi in )

Visto che due insiemi di dipendenze si possono scambiare quando hanno la stessa chiusura, una decomposizione preserva se la chiusura di è uguale alla chiusura dell’insieme .

equivalenza tra due insiemi di dipendenze funzionali

Siano e due insiemi di dipendenze funzionali. e sono equivalenti se .

  • ovvero non sono uguali ma hanno la stessa chiusura.

lemma 2

Siano e due insiemi di dipendenze funzionali. .

dimostrazione

Sia (una dipendenza di che non compare in ).

  • noi sappiamo che ogni dipendenza funzionale in è derivabile da mediante gli assiomi di Armstrong (perché , e , quindi le dipendenze di sono dipendenze di )
  • anche (e quindi ) è derivabile da tramite gli assiomi di Armstrong.
  • quindi, si ha
    • (ottengo da mediante Armstrong e poi, sempre mediante Armstrong, anche .)
    • Il punto cruciale è che, applicando solo gli assiomi di Armstrong su un sottoinsieme di , non “esco” mai da
  • quindi, è derivabile da con gli assiomi di Armstrong, e

preservare le dipendenze

definizione

Sia uno schema di relazione, un insieme di dipendenze funzionali su , e una decomposizione di . Diciamo che preserva se: dove

  • ogni è un insieme di dipendenze funzionali dato dalla proiezione di su
    • proiettare un insieme di dipendenze su un sottoschema significa prendere tutte e sole le dipendenze in che hanno tutti gli attributi in

verifica

Supponiamo di avere una decomposizione e voler verificare se preserva le dipendenze funzionali. Questo corrisponde a verificare che , ovvero che e che .

utilità del lemma 2 per la verifica

Grazie al lemma 2, per verificare che mi basta verificare che e che .

La verifica di è superflua, perché tutti gli elementi di sono necessariamente in

  • (infatti è definito come l’unione della proiezione di sulle varie decomposizioni, quindi l’unione di tutte le dipendenze di che hanno determinante e dipendente in è possibile che in non ci siano alcune dipendenze di , ma non il contrario)

Quindi, bisogna solo verificare che .

Grazie al lemma 1, mi basta verificare che

Si può fare con l’algoritmo che segue:

  • basta verificare che una sola dipendenza non appartiene alla chiusura di G per affermare che l’equivalenza non sussiste

algoritmo

  • input - due insiemi , di dipendenze funzionali su
  • output - la variabile successo, che indica se
  • se , allora per il lemma, ovvero per il Teorema

basta fare i controlli solo per le dipendenze “a cavallo” - quelle che hanno sia determinante che dipendente in una decomposizione sono rispettate per forza

Nasce un problema: come calcoliamo ? Potremmo usare l’algoritmo per il calcolo della chiusura di un insieme di attributi, ma dovremmo prima calcolare , e quindi , il che richiederebbe tempo esponenziale.

Per questo, esiste un algoritmo:

calcolo della chiusura di X rispetto a G a partire da F

  • input - uno schema , un insieme di dipendenze funzionali su , una decomposizione , un sottoinsieme di .
  • output - la chiusura di rispetto a
  • partendo da un sottoinsieme di attributi di , per prima cosa definiamo come stesso per riflessività.
  • dopodiché, ad ogni iterazione: fa:
    • prima l’interzezione tra e , per considerare solo gli elementi di che riguardano quello specifico sottoinsieme
    • poi la chiusura di quell’intersezione rispetto ad , per trovare tutti gli attributi che ci interessano (tutti quelli determinati da dipendenze in )
    • dopodiché l’intersezione con , perché dobbiamo tenere solo gli attributi che sono effettivamente in (per la questione dipendenze con det e dip in )
    • e infine l’unione con l’accumulatore , dove salviamo questo passo fatto per tutti i sottoinsiemi
      • nota: ad ogni iterazione (prima dell’unione con ), potremo ottenere massimo stesso (per l’intersezione con )
    • ho trovato quindi la chiusura rispetto a ogni singolo , e quindi rispetto a
    • quindi, avremo gli attributi che dipendono funzionalmente da , anche se appartengono a sottoschemi in cui non è incluso - perché dipendono da attributi che si trovano nello stesso sottoschema di e dipendono da , e anche in altri sottoschemi

(anche qui il latex dell’algoritmo rubato a flavio, che si diverte a fare queste cose)

dimostrazione

dimostrare che l’algoritmo funziona significa mostrare che, alla fine dell’algoritmo, conterrà tutta e sola la chiusura di rispetto a . Quindi, che .

Dimostriamo solo .

ricordiamo:

  • , con
  • (passo fondamentale dell’algoritmo)

Si dimostra per induzione sui ()

  • caso base (): , e , quindi
  • ipotesi induttiva:

passo induttivo: Sia (aggiunto all’ultimo passo). Se è stato aggiunto, vuol dire che deve esistere un sottoschema della decomposizione tale che: , ovvero .

Abbiamo quindi:

  • (per il lemma 1 e teorema ).

Sappiamo che , ma anche . Notiamo quindi che la dipendenza ha sia determinante che dipendente in un sottoschema , e quindi, per definizione di , appartiene a e, per costruzione di , appartiene a .

  • quindi

In più, , e, per ipotesi induttiva . Quindi si ha (decomposizione) e, per il lemma 1, . Per transitività, da , si ha , cioè (l.1) .

abbiamo quindi dimostrato che , ovvero

domande orale

possibili domande

  • cosa vuol dire che una decomposizione preserva un insieme di dipendenze?
  • dimostrazione Lemma 2
  • (forse) quali dipendenze bisogna controllare e quali no per l’algoritmo?
  • dimostrazione calcolo di a partire da