I valori Null nel modello relazionale

In una base dati il valore NULL indica l'assenza dell'informazione in uno o più attributi di una tupla.

In un DBMS il valore NULL indica l'assenza di informazione.

Il DBMS non distingue se l'informazione manca perché è sconosciuta o non esiste.

A cosa serve Null

I valori nulli permettono l'inserimento dei dati in una base dati anche se l'informazione è incompleta.

Nel modello relazionale ogni tupla deve essere diversa dalle altre che compongono la stessa tabella, perché ogni tabella è la rappresentazione di una relazione matematica.

esempio di tabella

Può comunque capitare di non avere tutte le informazioni necessarie per compilare una tupla.

un esempio di tupla incompleta

In questi casi ho due possibilità:

  • non inserire l'informazione in base dati finché non è completa
  • inserire l'informazione in base dati sostituendo gli attributi mancanti con il valore speciale NULL

A seconda dei casi scelgo la prima o la seconda strada.

Nota. La scelta del valore speciale NULL permette di distinguere i valori sconosciuti o inesistenti. Se usassi un valore del dominio, ad esempio lo spazio vuoto, la stringa "n.p." o lo zero, si creerebbero delle ambiguità con gli altri valori della base dati. Ad esempio, se nella tabella ci fosse un campo "telefono" vuoto vorrebbe dire che la persona non ha il telefono oppure non conosco il suo numero? Non è possibile saperlo.

Un esempio pratico

Questa tabella "dipendenti" ha quattro attributi: matricola, cognome, nome, stato civile

esempio di tabella

Devo aggiungere un nuovo dipendente in base dati ma non conosco lo stato civile, cosa devo fare?

La tupla è incompleta. Se la base dati fosse rigida non potrei inserirlo.

un esempio di tupla incompleta

Per fortuna la base dati è una struttura flessibile e permette l'assenza dell'informazione se non è essenziale.

In questo contesto l'informazione sullo stato civile del lavoratore non è essenziale.

Indico l'assenza dell'informazione uso il valore speciale NULL.

Poi inserisco la tupla nella tabella.

il valore NULL nella base dati

Posso comunque modificare la tupla in secondo momento per completare l'informazione quando ne sarò a conoscenza.

Nota. Se non conoscessi il cognome o la matricola il problema sarebbe diverso. In questo caso l'informazione è essenziale e non può essere sostituita con un valore nullo. In questi altri casi il valore Null non è ammissibile, è meglio non inserire la tupla nella tabella e attendere di completare l'informazione.
un esempio di valori nulli non ammissibili

Pro e contro degli indicatori nulli

Il vantaggio degli indicatori nulli è già noto

  • Permette l'inserimento delle informazioni incomplete nella base dati

Questa pratica ha però diversi svantaggi e alcuni limiti.

  • Se gli indicatori nulli sono molti, si riduce la qualità della base dati.
  • Non sempre è possibile sostituire un valore con l'indicatore NULL

    Esempio. Se l'attributo è un campo chiave della tabella (matricola) o comunque un'informazione rilevante (cognome) non posso sostituirlo con NULL. In questi casi il valore nullo non è ammissibile.
    un esempio di valori nulli non ammissibili
    Le due tuple non ammissibili potrebbero anche essere un duplicato della stessa informazione. Non è possibile saperlo.

In conclusione, l'uso del valore null indica la non disponibilità di un'informazione.

E' ammissibile soltanto se l'informazione non è essenziale.

Is Null e Is Not Nul

I valori nulli non contribuiscono al risultato di un'espressione booleana perché non sono né veri, né falsi. Sono valori sconosciuti (unknow).

Per questa ragione nell'algebra relazionale e nel linguaggo SQL i valori nulli sono trattati con apposite condizioni atomiche di selezione:

  • Is Null
    Questa espressione è vera se il valore è nullo. Viceversa è falsa.
  • Is Not Null
    Questa espressione è vera se il valore non è nullo. Viceversa è falsa.

Esempio

Questa relazione include un valore nullo (NULL) nell'attributo val (terza colonna) in corrispondenza della quarta tupla.

un esempio di tabella con un valore nullo

Se provo a selezionare tutti i valori possibili dell'attributo val in algebra relazionale

σ(val>5∨val≤5) (tabella)

o nel linguaggio SQL

SELECT * FROM tabella WHERE (val > 5) OR (val <= 5 )

Paradossalmente, il risultato finale ha una cardinalità minore, due tuple anziché tre, perché il valore nullo è escluso dalla selezione.

l'esclusione dei valori nulli dalla selezione

Pertanto, l'esclusione dei valori NULL può causare una perdita di informazioni nella base dati.

Per risolvere il problema in algebra relazionale si usa la condizione Is Null e la sua negazione Is Not Null.

σ(val>5∨val≤5∨val IS NULL) (tabella)

e lo stesso in SQL

SELECT * FROM tabella WHERE (val > 5) OR (val <= 5 ) OR (val IS NULL)

In questo modo ii risultato finale include tutte le tuple delle tabelle in ingresso.

un esempio di tabella con un valore nullo

E così via

 


 

Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

FacebookTwitterLinkedinLinkedin
knowledge base

Basi di dati