Dato uno schema di relazione e un insieme di dipendenze funzionali su , esiste sempre una decomposizione tale che:

  • è in 3NF
  • preserva
  • ha un join senza perdita

e tale decomposizione può essere calcolata in tempo polinomiale.

  • ci interessa una qualunque copertura minimale di dipendenze funzionali definite su (se ce ne fossero varie, potremmo voler scegliere quella con meno dipendenze, ma non è tra i nostri scopi)
  • quindi, come input dell’algoritmo, ci basta averne una qualunque

algoritmo

  • input: uno schema di relazione e un insieme di dipendenze su che sia una copertura minimale
  • output: una decomposizone di che preserva , di cui ogni schema è in 3NF

latex algo da flavio

spiegazione

  • prendo gli attributi che non compaiono nelle dipendenze di e li metto in
  • se ho aggiunto qualcosa a :
    • tolgo quello che ho aggiunto in da
    • lo metto in
  • se esiste una dipendenza in che coinvolge tutti gli attributi in (in cui non ci sono più quelli che ho eventualmente tolto):
    • metto in direttamente tutta
  • else:
    • metto in tutti gli attributi presenti nelle dipendenze di

teorema

Sia uno schema di relazione e 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 è in 3NF
  • preserva

dimostrazione

preserva (ovvero )

Sia .

Poiché per ogni dipendenza funzionale si ha , si ha che tutte le dipendenze di saranno sicuramente in . Quindi, e quindi .

  • (l’inclusione è banale, in quanto, per definizione, )
ogni schema di è in 3NF

abbiamo tre diversi casi che si possono presentare:

  1. ogni attributo in fa parte della chiave (gli attributi in sono quelli non coinvolti nelle dipendenze, quindi dovranno necessariamente essere nella chiave) e è in 3NF
  2. (ovvero esiste una dipendenza funzionale in che coinvolge tutti gli attributi in ) visto che è una copertura minimale, la dipendenza avrà forma . Abbiamo quindi che è superchiave per (determina e per riflessività) - a noi interessano le chiavi e non le superchiavi, ma:
  • non ci può essere un sottoinsieme di che determini tutto lo schema, perché partiamo da una copertura minimale (per definizione non ci può essere tale che , altrimenti avremmo ridotto a )
  • quindi, a qualunque manca determinare , il che implica che è chiave
  • infatti, prendiamo una qualsiasi dipendenza in - abbiamo due casi:
    • (è impossibile che ci siano due dipendenze con lo stesso dipendente visto che è una copertura minimale)
    • quindi, visto che è chiave, è primo
  1. non c’è un , ci sono diversi - quindi, è superchiave per , ed è anche chiave per il ragionamento di sopra (copertura minimale non esiste un che determina ).
  • prendiamo un qualunque tale che :
    • (per lo stesso ragionamento di prima - copertura minimale)
    • (è primo)

(teorema) avere anche un join senza perdita

Per avere anche un join senza perdita, se nessun sottoschema contiene una chiave, basta aggiungere un sottoschema che ne contenga una (una qualsiasi).

  • ha un join senza perdita

è sempre possibile avere una decomposizione con schemi in 3NF, che preservi F e abbia un join senza perdita?

sì! abbiamo visto un algoritmo che, in tempo polinomiale, fornisce questa decomposizione

domande orale

possibili domande orale

  • dimostrazione preserva e ogni schema di è in 3NF