Si le nom d'une personne est Null, comment cela casserait-il la base de données?


55

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 == NULLou quelque chose? Même si je ne pense pas NULL is same as "NULL".


32
L'article était évidemment écrit par un journaliste. Les nullités sont la cause de nombreuses confusions, vous ne vous attendriez pas à ce qu'un journaliste soit moins confus.
Ypercubeᵀᴹ

2
Tout le monde: Les commentaires contenant des liens vers des questions ou des articles connexes ont été déplacés vers une réponse du wiki de la communauté ci-dessous. Veuillez modifier (ou suggérer une modification) à cette réponse au lieu d’ajouter des liens sur cette page.
Paul White

Réponses:


42

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.


En effet, c'est assez courant dans les frameworks pour les langages non typés où toutes les données sont converties en chaîne. Cela fait quelques années que je travaille dessus, mais je pense que les premières versions de ColdFusion avaient ce problème, par exemple.
Jules

25

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.


5
Je ne savais pas que O'Brian était hawaïen.
Glglgl

19

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:

currentChild.appendChild("Fred");

ajouterait un élément contenant le mot Fredà un document XML mais le code:

currentChild.appendChild("null");

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, NULLn'a aucune signification particulière dans XML.


13

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".


8

Communauté Wiki réponse pour les différents liens laissés à l'origine comme commentaires sur cette question populaire


4

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.


2

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?

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.