Best Practices: il tipo di dati Vero/Falso

Nella progettazione del database si arriva a un certo momento alla definizione del tipo di dati che ogni campo deve avere. Tra quelli disponibili in Microsoft Access c’è il tipo di dati Vero/Falso. Vero / Falso può essere inteso come On/Off, acceso/spento, insomma esiste una sola alternativa: o è Vero o è Falso. Come dicevano gli antichi… tertium non datur. Ma è davvero sempre così?! Siamo certi che in alcuni casi non sia necessario tenere conto di una terza scelta? Se ci pensate bene… la terza scelta esiste sempre. Supponiamo di avere una tabella anagrafica. Esiste un campo per memorizzare il fatto che l’individuo accetti o meno invio di pubblicità promozionale. Facilmente in fase di progettazione la scelta ricade sul tipo di dati Vero/Falso. O l’individuo accetta la pubblicità o non l’accetta. Dove sta il problema? Immaginiamo di avere questi dati:

Tipo di dati Vero Falso

Ora con una semplice query possiamo contare i “vero” e i “falso”:

Conteggio vero falso

E’ chiaro che 7 hanno accettato l’invio della pubblicità. Il problema è con i restanti 8: come possiamo distinguere quelli che hanno rifiutato l’invio della pubblicità da quelli ai quali non è ancora stato chiesto? La risposta è semplice: con un tipo di dati Vero/Falso non è possibile.

Immaginate che si decida di fare un recall e contattare i “No” per sapere se sono interessati alla pubblicità. Come è possibile selezionare solo quelli che hanno realmente detto “No, non mi interessa”, da quelli che non l’hanno ancora detto perché non contattati o perché non hanno risposto alla domanda? E’ impossibile, perché in entrambi i casi il tipo di dati scelto in fase di progettazione memorizza Falso, che in realtà corrisponde a due possibili condizioni: ha detto “No” oppure è un dato mancante.

Ne consegue che quando scelgo un tipo di dati Vero/Falso devo sempre chiedermi: mi serve distinguere Vero/Falso/Nullo? [Nullo identifica il caso in cui non ho ancora informazioni tali da determinare se è Vero o è Falso; possiamo parlare di dato mancante o missing o blank]. Se la risposta è affermativa e voglio distinguere queste tre condizioni, la soluzione è un campo di tipo Testo, per esempio a lunghezza 2, con 3 possibili valori: Sì/No/ND, impostato a ND di default. In tal modo potrò facilmente contattare gli “ND” e avere una risposta definitiva: “Ma la vuoi la pubblicità?”