Null sert un objectif très valable de représenter un manque de valeur.
Je dirai que je suis la personne la plus éloquente que je connaisse au sujet des abus de null et de tous les maux de tête et de souffrances qu’ils peuvent causer, en particulier lorsqu’ils sont utilisés généreusement.
Ma position personnelle est que les personnes peuvent utiliser des valeurs nulles uniquement lorsqu'elles peuvent justifier qu'elles sont nécessaires et appropriées.
Exemple justifiant des valeurs nulles:
Date de décès est généralement un champ nullable. Il y a trois situations possibles avec la date du décès. Soit la personne est décédée et la date est connue, la personne est décédée et la date est inconnue, soit la personne n’est pas morte et, par conséquent, la date du décès n’existe pas.
Date of Death est également un champ DateTime et n'a pas de valeur "unknown" ou "empty". La date par défaut qui apparaît lorsque vous créez une nouvelle date / heure varie en fonction de la langue utilisée, mais il est techniquement possible que cette personne décède à ce moment-là et qu'elle soit considérée comme votre "valeur vide" si vous deviez utilisez la date par défaut.
Les données devraient représenter la situation correctement.
La personne est morte la date du décès est connue (3/9/1984)
Simple, '3/9/1984'
La personne est morte date inconnue
Alors quoi de mieux? Null , '0/0/0000' ou '01 / 01/1869 '(ou quelle que soit votre valeur par défaut est?)
Personne n'est pas la date morte du décès n'est pas applicable
Alors quoi de mieux? Null , '0/0/0000' ou '01 / 01/1869 '(ou quelle que soit votre valeur par défaut est?)
Alors réfléchissons à chaque valeur ...
- Null , cela a des implications et des préoccupations dont vous devez vous méfier, essayer accidentellement de le manipuler sans confirmer que ce n'est pas nul d'abord, par exemple, jetterait une exception, mais cela représenterait également le mieux la situation réelle ... Si la personne n'est pas morte la date du décès n'existe pas ... ce n'est rien ... c'est nul ...
- 0/0/0000 , Cela pourrait bien se passer dans certaines langues et pourrait même constituer une représentation appropriée sans date. Malheureusement, certaines langues et validations rejetteront cela comme une date / heure invalide, ce qui en fait un non-lieu dans de nombreux cas.
- 1/1/1869 (ou quelle que soit votre valeur date / heure par défaut) , le problème est qu'il devient difficile à gérer. Vous pouvez utiliser cela comme valeur de valeur nulle, sauf ce qui se passe si je veux filtrer tous mes dossiers pour lesquels je n'ai pas de date de décès? Je pourrais facilement filtrer les personnes décédées à cette date, ce qui pourrait causer des problèmes d'intégrité des données.
Le fait est parfois vous ne doivent représenter rien et que parfois un type de variable fonctionne bien pour cela, mais les types souvent variables doivent être en mesure de représenter rien.
Si je n'ai pas de pommes, j'ai 0 pommes, mais que se passe-t-il si je ne sais pas combien de pommes j'ai?
Bien entendu, null est utilisé de manière abusive et potentiellement dangereux, mais il est parfois nécessaire. Ce n'est que par défaut dans de nombreux cas car jusqu'à ce que je fournisse une valeur, l'absence d'une valeur et quelque chose doit la représenter. (Nul)