Je lisais cet article sur la BBC. Il raconte l'histoire d'une personne nommée Jenifer Null et explique comment elle fait face aux problèmes quotidiens lors de l'utilisation de bases de données en ligne telles que la réservation de billets d'avion, les services bancaires en ligne, etc.
Je ne suis pas très versé dans les bases de données et je ne l'utilise pas très souvent. Lorsque j'ai créé un site Web pour apprendre, la validation du formulaire côté serveur utilisait des expressions régulières. D'après mes souvenirs, le nom "Null" serait accepté avec joie. Je n'ai pas essayé cependant.
Quelqu'un pourrait-il expliquer les détails techniques lorsque cette situation se produirait? Est-ce que la validation du formulaire ne fait que faire un string == NULL
ou quelque chose? Même si je ne pense pas NULL is same as "NULL"
.
la source
Réponses:
J'ai vu des interfaces de base de données (par exemple, des bibliothèques de structure) qui renvoient «null» sous forme de chaîne pour des colonnes nulles. Je crois qu'il y avait un drapeau qui allumerait ou éteindrait cela pour le débogage. Cet indicateur permet aux développeurs de déterminer facilement si le champ vide est le résultat d'une valeur NULL ou d'une valeur vide. Ceci est un mauvais réglage, en particulier en production, et expliquerait les problèmes expliqués dans l'article.
Le traitement inverse de la conversion de "null" en une valeur null doit générer une erreur d'application pour un champ de nom. Je m'attendrais à ce que cela soit résolu assez rapidement.
la source
Il est fort probable qu'une grande partie de votre confusion provienne de celle du journaliste. L'article parle de problèmes d'utilisation de systèmes d'application entiers, pas seulement de bases de données. Complètement raisonnable puisqu'il s'agit d'un écrit destiné à une consommation de masse, mais les détails techniques sont passés sous silence ou mal compris par l'auteur.
Un certain nombre de ces problèmes sont probablement dus à la couche application plutôt qu'à l'API de la base de données. Les valeurs magiques sont un anti-modèle qui est ridiculement difficile à éliminer de l'industrie. Très facilement, certains programmeurs auraient pu écrire une condition du type "quelqu'un qui a tapé 'null'? Ils doivent signifier qu'il n'y a pas de valeur, car c'est ce que signifie null!" Une tentative erronée d'empêcher l'injection de SQL pourrait également être responsable du mauvais traitement de Null, ou du nom de famille hawaïen, qui contient un guillemet simple, qui est également le délimiteur de chaîne SQL standard.
Une application qui transforme de manière incorrecte ces valeurs en NULL ou en une chaîne vide peut facilement créer des erreurs si la logique métier ou les contraintes de base de données attendent quelque chose de différent. Cela se traduit naturellement par l'expérience utilisateur frustrante décrite dans l'article.
la source
L'article lui-même inclut un lien vers une question de dépassement de pile qui illustre le problème; c'était dans une application Flex où le code:
ajouterait un élément contenant le mot
Fred
à un document XML mais le code:ajouterait un élément vide, pas un élément contenant le texte "null".
XML, en tant que tel, n’a pas de problème avec la valeur de texte "NULL", donc l’inclusion d’un tel texte ne poserait aucun problème. En fait,
NULL
n'a aucune signification particulière dans XML.la source
Une chose que je ne pense pas avoir déjà vue mentionnée: nous ne parlons pas seulement de SQL.
Le nom peut commencer / terminer dans la base de données ... mais pour y arriver, il faut normalement utiliser PLUSIEURS canaux. Base de données, SQL, php, html, javascript ... Java, C #, VB, Perl, Phython, Ruby, Bash, batch, etc, etc, etc ...
Chacune de ces étapes en cours peut impliquer la conversion de données d’un format à un autre. Des tables SQL, JSON, XML, CSV, etc ...
À n'importe quel moment de cette chaîne compliquée, il ne vous faudra qu'un seul point de mauvaise programmation ou un langage de programmation flou ( gestion du code JavaScript par exemple) ...
Alors ne vous limitez pas au problème qui se trouve dans la base de données ... car il peut être n'importe où dans la "pile".
la source
Communauté Wiki réponse pour les différents liens laissés à l'origine comme commentaires sur cette question populaire
Comment un nom de famille de Null pose-t-il des problèmes dans de nombreuses bases de données? (Programmeurs SE)
La fausseté des programmeurs croit aux noms par Patrick McKenzie
Autorisé à Bill par David Mikkelson (snopes.com)
Un exemple de codage qui causera ce problème dans la couche d'application.
Exploits of a Mom - aka Petites tables de Bobby (xkcd webcomic)
la source
Les bases de données relationnelles doivent prendre en compte les valeurs manquantes ou non pertinentes. Par exemple, la liste des clients peut inclure un numéro de téléphone mobile ou un sexe. Que se passe-t-il si une entreprise veut devenir client - quel genre devrait-elle avoir?
Un indicateur spécial indique qu'une valeur est manquante. Ce drapeau spécial est NULL. Une programmation négligée peut donc confondre l'indicateur de valeur manquante - NULL - et le nom de famille de Jennifer Null, interprétant peut-être son nom de famille comme des données manquantes plutôt que comme une valeur réelle.
C'est un peu comme ouvrir un compte bancaire sans déposer d'argent. Le solde est nul. Cela ne signifie pas que vous n'avez pas d'équilibre. Cela signifie que vous avez un solde et que sa valeur est "0". Mais une programmation négligée pourrait mal interpréter le zéro comme un "n’existe pas" et déterminer que vous n’avez pas de compte du tout.
la source
Il y a beaucoup de logiciels mal écrits, et même de cadres, qui se comporteraient étrangement avec quelqu'un nommé Null.
Mais n'oublions pas l'élément humain: peut-être que les humains voient le nom sur des écrans et des imprimés et pensent que c'est une erreur et que la suppression de la personne en est une autre cause probable?
la source