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
slide algoritmo
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 :
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