Vai al contenuto
Sistemi Informativi

Normalizzazione: dipendenze funzionali, BCNF e terza forma normale

Anomalie di aggiornamento, inserimento e cancellazione, dipendenze funzionali e assiomi di Armstrong, chiusura e test di chiave, teorema di Heath dimostrato, BCNF, 3NF e denormalizzazione.

Una tabella che mescola informazioni su oggetti diversi funziona finché non si deve modificarla: allora i dati ripetuti vanno aggiornati ovunque, e prima o poi qualcuno se ne dimentica. La normalizzazione è la teoria che dice quando uno schema è ben fatto e come correggerlo. In questa lezione vediamo le anomalie con un esempio, le dipendenze funzionali e gli assiomi di Armstrong, la chiusura di un insieme di attributi e il test di chiave, il teorema di Heath con la dimostrazione, la forma normale di Boyce-Codd e la terza forma normale.

Le anomalie

Si consideri la tabella Esami(matricola, nome, codice, titolo, voto), che registra gli esami con il nome dello studente e il titolo del corso. Il nome di uno studente compare in ogni suo esame, il titolo di un corso in ogni esame di quel corso. Ne nascono tre anomalie:

  • di aggiornamento: per correggere il titolo di un corso bisogna modificare centinaia di righe, e se se ne salta una i dati diventano incoerenti;
  • di inserimento: non si può registrare un corso nuovo finché nessuno ne ha sostenuto l’esame, perché la chiave (matricola, codice) richiede una matricola;
  • di cancellazione: cancellando l’ultimo esame di un corso si perde anche il suo titolo.

La causa è che la tabella rappresenta tre concetti (studenti, corsi, esami) in uno. La teoria delle dipendenze funzionali lo rende preciso.

Le dipendenze funzionali

Dati due insiemi di attributi X e Y di una relazione, X \to Y (X determina Y) se due tuple uguali su X sono sempre uguali anche su Y. Nell’esempio: matricola → nome, codice → titolo, (matricola, codice) → voto. Le dipendenze funzionali sono regole del mondo reale, come le cardinalità del modello E-R, e una chiave K è proprio un insieme di attributi tale che K \to tutti gli attributi, in modo minimale.

Da alcune dipendenze se ne deducono altre con gli assiomi di Armstrong:

  • riflessività: se Y \subseteq X, allora X \to Y;
  • arricchimento: se X \to Y, allora XZ \to YZ;
  • transitività: se X \to Y e Y \to Z, allora X \to Z.

Sono corretti (deducono solo dipendenze vere) e completi (deducono tutte quelle che seguono dalle iniziali).

La chiusura e il test di chiave

La chiusura X^+ di un insieme di attributi è l’insieme di tutti gli attributi determinati da X. Si calcola partendo da X^+ = X e aggiungendo, finché si può, il lato destro di ogni dipendenza A \to B il cui lato sinistro A è già contenuto in X^+. X è una superchiave se e solo se X^+ contiene tutti gli attributi.

Nell’esempio, \{matricola, codice\}^+: si parte da {matricola, codice}, si aggiunge nome (da matricola), titolo (da codice), voto (dalla terza dipendenza): tutti gli attributi, quindi è una superchiave, e poiché né matricola né codice da soli bastano, è una chiave.

Decomporre senza perdere informazione

Normalizzare vuol dire decomporre una relazione in relazioni più piccole. Ma la decomposizione deve essere senza perdita: rimettendo insieme le parti con la giunzione naturale si deve ottenere esattamente la relazione di partenza, senza tuple spurie.

Decomposizione senza perdita di una relazione guidata da una dipendenza funzionale
La relazione con attributi X, Y, Z soddisfa X determina Y. Divisa nelle due relazioni con attributi X, Y e X, Z, la si ricostruisce esattamente con la giunzione sugli attributi X: ogni valore di X corrisponde a un solo valore di Y, quindi non nascono combinazioni false.

Teorema (Heath). Se una relazione R(X, Y, Z) soddisfa X \to Y, allora la decomposizione in R_1 = \pi_{XY}(R) e R_2 = \pi_{XZ}(R) è senza perdita: R_1 \bowtie R_2 = R.

Dimostrazione. *R \subseteq R_1 \bowtie R_2.* Ogni tupla (x, y, z) di R ha la proiezione (x, y) in R_1 e (x, z) in R_2, che si combinano di nuovo in (x, y, z). *R_1 \bowtie R_2 \subseteq R.* Sia (x, y, z) una tupla della giunzione. Viene da (x, y) \in R_1, proiezione di una tupla (x, y, z_1) di R, e da (x, z) \in R_2, proiezione di una tupla (x, y_2, z) di R. Le due tuple di R sono uguali su X, quindi per la dipendenza X \to Y sono uguali su Y: y_2 = y. Allora (x, y_2, z) = (x, y, z) appartiene a R. ∎

Senza la dipendenza la decomposizione può creare tuple false: se a x_1 corrispondessero y_1 e y_2, la giunzione combinerebbe ogni y con ogni z di x_1, anche con quelli mai visti insieme.

Le forme normali

Una relazione è in forma normale di Boyce-Codd (BCNF) se, per ogni dipendenza non banale X \to Y, X è una superchiave. In parole: ogni fatto che la tabella registra dipende dalla chiave, tutta la chiave e nient’altro. La tabella Esami non è in BCNF, perché matricola → nome e matricola non è superchiave. Applicando il teorema di Heath due volte si ottengono Studenti(matricola, nome), Corsi(codice, titolo) ed Esami(matricola, codice, voto): tutte in BCNF, e le anomalie spariscono. È lo stesso schema che la progettazione E-R avrebbe dato direttamente (lezione sul modello E-R).

La decomposizione in BCNF è sempre possibile senza perdita, ma a volte perde una dipendenza: non si riesce più a controllarla dentro una sola tabella. Il caso tipico: in Lezioni(studente, materia, docente), ogni docente insegna una sola materia (docente → materia) e ogni studente ha un solo docente per materia ((studente, materia) → docente). Portandola in BCNF si separa (docente, materia) da (studente, docente), e la regola che lega studente e materia al docente non si verifica più in una sola tabella. La terza forma normale (3NF) è un po’ più permissiva: ammette X \to A anche se X non è superchiave, purché A faccia parte di una chiave. Si dimostra che ogni schema si può sempre portare in 3NF senza perdita e conservando tutte le dipendenze.

Nella pratica si normalizza fino alla 3NF o alla BCNF, e si denormalizza consapevolmente solo dove serve velocità di lettura, come nei data warehouse (lezione sui dati distribuiti), accettando la ridondanza in cambio di meno giunzioni.

Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
0
Would love your thoughts, please comment.x
()
x