Related


Introduzione

Come abbiamo visto una decomposizione deve rispettare queste 3 condizioni:

  1. Ogni sotto-schema deve essere 3NF
  2. La decomposizione deve preservare le dipendenze funzionali
  3. Deve essere possibile ricostruire ogni istanza legale dello schema originale tramite join naturale di istanze della decomposizione

Abbiamo anche visto come verificare che una decomposizione rispetti queste regole, ma non abbiamo ancora visto come calcolare una decomposizione valida.

Sempre possibile ?

Si, è sempre possibile trovare una decomposizione valida.


Algoritmo

La decomposizione che si ottiene dall’algoritmo che studieremo non è l’unica possibile che soddisfi le condizioni richieste. Lo stesso algoritmo, a seconda dell’input di partenza può fornire risultati diversi e tuttavia corretti.

Prima di continuare è importante conoscere il concetto di copertura minimale di un insieme di dipendenze funzionali.

Input/Output

Input:

  • uno schema relazionale
  • un insieme di dipendenze funzionali che è una copertura minimale (se abbiamo più coperture è consigliato utilizzare quella con il minor numero di dipendeze)

Output una decomposizione di tale che:

Spiegazione

Primo FOR: inserisce dentro tutti gli attributi che non compaiono in nessuna delle dipendenze funzionali di .

Primo IF: Se non è vuoto allora

  • Rimuoviamo da tutti gli attributi che non compaiono mai nelle dipendenze di (ovvero facciamo )
  • Inseriamo in l’insieme di attributi (quindi avremo che )

Secondo IF: se

else:

oss: l’algoritmo richiede tempo polinomiale


Dimostrazione

Abbiamo dette che questo algoritmo ci permette di ottenere un decomposizione che rispetta queste due proprietà:

  • Ogni sotto-schema deve essere 3NF
  • La decomposizione deve preservare le dipendenze funzionali

Dimostriamolooo!! 😖

Dimostrazione: ogni sotto-schema deve essere 3NF

Ci sono 3 modi per aggiungere degli insiemi di attributi:

  • 1° if:
  • 2° if:
  • if else:

1° IF

Eseguiamo ovvero aggiungiamo a l’insieme degli attributi non coinvolti in alcuna dipendenza dipendenze di .

Banalmente è in 3NF perché sicuramente ogni attributo in appartiene alla chiave visto che non esistono dipendenze in per raggiungerli.


2° IF

Eseguiamo ovvero aggiungiamo ad l’insieme degli attributi coinvolti nelle dipendenze di .

oss: al passaggio precedente abbiamo effettuato quindi non contiene gli attributi che non sono coinvolti nelle dipendenze di .


Teorema

Sia uno schema di relazione ed un insieme di dipendenze funzionali su , che è una copertura minimale. L’algoritmo di decomposizione permette di calcolare in tempo polinomiale una decomposizione di tale che:

  • ogni schema di relazione è in 3NF
  • preserva

Dimostrazione

Dimostriamo separatamente le due proprietà della decomposizione

preserva

Sia . Poiché per ogni dipendenza funzionale si ha che (è proprio uno dei sottoschemi), si ah che questa dipendenza di sarà sicuramente in , quindi e, quindi . L’inclusione è banalmente verificata in quanto per definizione,