Je sais que ce sujet est un peu controversé et que de nombreux articles / opinions circulent sur Internet. Malheureusement, la plupart d'entre eux supposent que la personne ne sait pas quelle est la différence entre NULL et une chaîne vide. Donc, ils racontent des histoires sur des résultats surprenants avec des jointures / agrégats et font généralement des leçons SQL un peu plus avancées. En faisant cela, ils manquent absolument tout et sont donc inutiles pour moi. J'espère donc que cette question et toutes les réponses avancent un peu.
Supposons que j'ai une table avec des informations personnelles (nom, naissance, etc.) où l'une des colonnes est une adresse email de type varchar. Nous supposons que pour une raison quelconque, certaines personnes pourraient ne pas vouloir fournir une adresse électronique. Lorsque vous insérez ces données (sans courrier électronique) dans la table, vous avez le choix entre deux options: définissez la cellule sur NULL ou définissez-la sur une chaîne vide (''). Supposons que je connaisse toutes les implications techniques du choix d’une solution sur une autre et que je puisse créer des requêtes SQL correctes pour l’un ou l’autre des scénarios. Le problème est que même lorsque les deux valeurs diffèrent sur le plan technique, elles sont exactement les mêmes sur le plan logique. Après avoir regardé NULL et '' je suis arrivé à une conclusion: je ne connais pas l'adresse électronique du gars. Aussi peu importe combien j'ai essayé, Je ne pouvais pas envoyer de courrier électronique en utilisant la chaîne NULL ou une chaîne vide. La plupart des serveurs SMTP étaient apparemment en accord avec ma logique. J'ai donc tendance à utiliser NULL où je ne connais pas la valeur et considère la chaîne vide comme une mauvaise chose.
Après des discussions intenses avec des collègues, je suis venu avec deux questions:
Ai-je raison de supposer que l'utilisation d'une chaîne vide pour une valeur inconnue provoque le "mensonge" d'une base de données sur les faits? Pour être plus précis: en utilisant l'idée de SQL sur ce qui est valeur et ce qui ne l'est pas, je pourrais arriver à la conclusion suivante: nous avons une adresse électronique, simplement en découvrant qu'elle n'est pas nulle. Mais plus tard, lorsque j'essayerai d'envoyer un courrier électronique, je parviendrai à une conclusion contradictoire: non, nous n'avons pas d'adresse de courrier électronique, cette @! # $ Base de données a dû mentir!
Existe-t-il un scénario logique dans lequel une chaîne vide '' pourrait être un si bon porteur d'informations importantes (sans valeur ni valeur), qu'il serait gênant / inefficace de stocker par tout autre moyen (comme une colonne supplémentaire). J'ai vu de nombreux articles affirmant qu'il est parfois utile d'utiliser des chaînes vides avec des valeurs réelles et des valeurs NULL, mais jusqu'à présent, je n'ai pas vu de scénario qui serait logique (en termes de conception SQL / DB).
PS Certaines personnes seront tentées de répondre que c'est simplement une question de goût personnel. Je ne suis pas d'accord Pour moi, c'est une décision de conception avec des conséquences importantes. Je voudrais donc voir des réponses où l'opinion à ce sujet est soutenue par des raisons logiques et / ou techniques.
''
même dans Oracle, ce n'est pas la même chose que NULL
. Par exemple, l’affectation d’une CHAR(1)
colonne à la valeur (c’est- ''
à ' '
-dire un espace), pas NULL
. En outre, si Jacek utilisait Oracle, cette question ne serait probablement pas posée :-)
'' IS NULL
évalué true
en PL / SQL.