Disons que vous avez une application qui a un champ booléen dans sa table User
appelée Inactive
.
Y a-t-il quelque chose d'intrinsèquement mauvais à simplement stocker false comme nul? Dans l'affirmative, pouvez-vous expliquer ce que devrait être l'inconvénient? J'ai discuté de cela avec quelqu'un il y a quelques mois et nous avons tous deux convenu que cela ne devrait pas avoir d'importance tant que vous le faites de manière cohérente dans l'application/la base de données. Récemment, quelqu'un que je connais a insisté sur le fait que "vrai" true
ou false
devrait être utilisé, mais ils n'ont pas vraiment expliqué pourquoi.
Y a-t-il quelque chose d'intrinsèquement mauvais à simplement stocker false comme nul?
Oui.
Dans l'affirmative, pouvez-vous expliquer ce que devrait être l'inconvénient?
NULL n'est pas identique à False.
Par définition, les comparaisons (et la logique) qui impliquent NULL doivent renvoyer des valeurs de NULL (pas False). Cependant, les implémentations SQL peuvent varier.
True and NULL
est NULL (pas faux).
True and NULL or False
est NULL (pas faux).
http://en.wikipedia.org/wiki/Null_ (SQL) # Three-value_logic_.283VL.29
En autorisant les valeurs nulles dans un champ booléen, vous transformez une représentation binaire voulue (vrai/faux) en une représentation à trois états (vrai, faux, nul) où vos entrées "nulles" sont indéterminées. La valeur "null" n'est ni "vrai" ni "faux". Quelle raison auriez-vous à augmenter votre représentation pour être inexacte?
Même si vous décidez d'un modèle comme celui-ci et que vous le faites de manière cohérente tout au long de votre application, cela ne vous convient pas. Vous vous retrouverez dans une situation où il n'est pas clair pour les yeux frais pourquoi ce modèle est en place ou, plus probablement, vous vous retrouverez dans une situation où ce modèle est accidentellement cassé.
Ce que les autres ont dit. 3 valeurs possibles n'est pas un booléen.
Mais vous pouvez avoir un besoin légitime de 3 valeurs. Tels que (vrai, faux, inconnu). Même si c'est le cas, si vous êtes dans l'ultra-normalisation, vous n'accepterez aucune valeur nulle. Au lieu de cela, vous stockerez un vrai booléen dans une autre table avec une relation 1 à 1. Une valeur nulle peut être produite dans une requête par une jointure externe "ayant échoué", et non par une valeur nulle stockée physiquement.