Dato uno schema di relazione e un insieme di dipendenze funzionali su esiste sempre una decomposizione di che rispetta i criteri di una buona decomposizione in 3NF, cioè:

Tale decomposizione può essere calcolata in tempo polinomiale con un algoritmo che riceve in input una qualunque copertura minimale di , che definiamo .

Input: , .

Output: .

  1. for in : (questa parte serve a selezionare nell‘“accumulatore” tutte le dipendenze funzionali non coinvolte in nessuna dipendenza funzionale in )
    1. if non è coinvolto in nessuna dipendenza funzionale in :
  2. if : (questa parte rimuove tutti gli attributi di da , inizializzando la decomposizione a )
  3. if esiste che coinvolge tutti gli attributi in :
  4. else:
    1. for in :

Esempio

Dato e

Verifica che è una chiave per .

  • deve determinare funzionalmente tutto lo schema: vero, perché la chiusura di coincide con .
  • Nessun sottoinsieme di deve determinare funzionalmente l’intero schema: vero, perché considerando che la chiave deve avere sicuramente , e non coincidono con .

Sapendo che è l’unica chiave per , verifica che non è in 3NF.

Esistono le dipendenze parziali e , quindi non può essere in 3NF.

Trova una copertura minimale di .

Primo passo: decomporre i determinati in singleton

Secondo passo: rimuovere gli attributi superflui dei determinanti:

  • : , quindi . Nessun attributo è ridondante.
  • : , quindi . Nessun attributo è ridondante.
  • : È atomica, quindi nessun attributo può essere rimosso.
  • : , quindi . Nessun attributo è ridondante.
  • : , quindi (perché esiste in ). è ridondante, quindi possiamo ridurre la dipendenza a , che esiste già in .

Terzo passo: rimuovere le dipendenze ridondanti:

  • Rimuovendo si altererebbe , quindi la dipendenza non è ridondante.
  • Rimuovendo si altererebbe , quindi la dipendenza non è ridondante.
  • Rimuovendo si altererebbe , quindi la dipendenza non è ridondante.
  • Rimuovendo non si altererebbe , quindi la dipendenza è ridondante (tra l’altro è ottenuta per transitività da )

Trova una decomposizione di tale che preserva e ogni schema in è in 3NF.

Iniziamo l’algoritmo: per prima cosa . Non ci sono dipendenze che coinvolgono tutti gli attributi dello schema, quindi eseguiamo l’istruzione 5. dell’algoritmo, ottenendo .

Trova una decomposizione di tale che preserva e ogni schema in è in 3NF.

per avere una decomposizione con join senza perdita, aggiungiamo alla decomposizione precedente un sottoschema che contenga la chiave (che non è già contenuta in alcuno degli schemi ottenuti)

Dimostrazione della correttezza dell’algoritmo

todo pag. 5 pdf 19