cosa vogliamo ottenere?

Quando si decompone uno schema di relazione R su cui è definito un insieme di dipendenze funzionali F, oltre ad ottenere schemi 3NF occorre:

  • preservare le dipendenze
  • poter ricostruire tramite join tutta e sola l’informazione originaria.

Le dipendenze funzionali che si vogliono preservare sono tutte quelle che sono soddisfatte da ogni istanza legale di R - le dipendenze funzionali in .

Vogliamo quindi calcolare , ma questo richiede tempo - è sufficiente avere un metodo per decidere se una dipendenza funzionale . Questo può essere fatto calcolando e verificando se . Infatti, ricordiamo il lemma 1 e il teorema che dimostra che .

calcolare richiede tempo esponenziale

Basta considerare gli assiomi di riflessività o aumento o decomposizione: ogni sottoinsieme di porta a una o più dipendenze e i possibili sottoinsiemi di sono

come calcolare

per il calcolo di possiamo usare il seguente algoritmo:

  • input: uno schema di relazione , un insieme di dipendenze funzionali su , e un sottoinsiee di
  • output: la chiusura di rispetto a (nella variabile )

algoritmo:

(latex algoritmo rubato a flavio con piccoli cambiamenti)

  • per prima cosa, si definisce come stessa (infatti, per riflessività, come minimo )
  • poi si definisce , un accumulatore per i nuovi attributi, come quindi, partendo da , cerco una dipendenza con (quindi che abbia come determinante un pezzo di ) e metto nell’accumulatore ogni elemento del dipendente. Dire vuol dire (riflessività), perciò, per transitività,

Essenzialmente, prende le dipendenze con un determinante contenuto in e le mette nella sua chiusura.

  • dopodiché, controlla se ha aggiunto cose nuove a (ovvero se ) :
    • se ha aggiunto nuove dipendenze, ridefinisce come (aggiunge l’accumulatore a ) e riapplica l’algoritmo (perché le nuove aggiunte possono essere usate per trovare altre dipendenze)
    • altrimenti,vuol dire che ha finito di trovare altre dipendenze e è completo

esempio

teorema: l’algoritmo è corretto

L’algoritmo “calcolo di ” calcola correttamente la chiusura di un insieme di attributi rispetto ad un insieme di dipendenze funzionali.

dimostrazione

Indichiamo con il valore iniziale di () e con ed , con , i valori di e dopo l’i-esima esecuzione del corpo del ciclo. È facile vedere che

Sia tale che è , ovvero al termine dell’algoritmo. Quindi . Dobbiamo provare

parte

Si dimostra per induzione.

  • caso base: , per riflessività , quindi
  • ipotesi induttiva: poniamo per ipotesi induttiva che
    • (ricordiamo che per il lemma 1 abbiamo quindi: )
passo induttivo

Prendiamo , ovvero aggiunto all’ultimo passo. Vuol dire che è stato aggiunto perché (a è determinato da qualcosa che si trovava in ).

Per ipotesi induttiva, ho , quindi, per decomposizione () per il lemma 1, . Per transitività, da (che è in e quindi in ) ottengo . Per il lemma 1, ho e quindi .

quindi, visto che e per ipotesi induttiva , ho dimostrato

parte

Sia . Sappiamo, per il lemma 1, che (per il teorema ).

Consideriamo la seguente istanza di :

center

che ha due tuple uguali sugli attributi di ( finale) e diverse su .

mostriamo che è un’istanza legale

Prendiamo una qualunque dipendenza funzionale .

  • se (quindi ) le tuple sono diverse su almeno un attributo di , quindi la dipendenza è rispettata

Se le due tuple avranno valori uguali su . Infatti, se per assurdo avessimo ma , ci sarebbe almeno un elemento di in . Questo è impossibile per come è definito l’algoritmo: Vorrebbe dire che, applicando l’algoritmo, potrei ancora inserire nuovi elementi in - ma questo è impossibile perché, per costruzione, è finale. Quindi vuol dire che è impossibile, e quindi la dipendenza è soddisfatta.

è quindi un’istanza legale (rispetta una qualsiasi dipendenza di )

dimostriamo l’implicazione

Sappiamo che , quindi le due tuple sono uguali su . Visto che è un’istanza legale, deve soddisfare , quindi lo saranno anche su , il che implica .

abbiamo quindi dimostrato anche

proprietà dell’insieme vuoto

  • l’insieme vuoto è un sottoinsieme di ogni insieme A:
  • l’unione di qualunque insieme con l’insieme vuoto è stesso:
  • l’intersezione di qualunque insieme con l’insieme vuoto è l’insieme vuoto:
  • il prodotto cartesiano di un qualunque insieme con l’insieme vuoto è l’insieme vuoto:
  • l’unico sottoinsieme dell’insieme vuoto è l’insieme vuoto stesso
  • la cardinalità dell’insieme vuoto è zero: l’insieme vuoto è finito

domande orale

Question

  • perché calcolare richiede tempo esponenziale?
  • dimostrazione della correttezza dell’algoritmo per il calcolo di