web-dev-qa-db-fra.com

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

Je lisais ce article sur la BBC. Il raconte l'histoire d'une personne nommée Jenifer Null et comment elle fait face à des problèmes quotidiens tout en utilisant des bases de données en ligne comme la réservation de billets d'avion, les services bancaires nets, etc.

Je ne connais pas très bien les bases de données et je ne l'utilise pas très souvent. Lorsque j'ai créé un site Web pour l'apprentissage, la validation du formulaire côté serveur a utilisé des expressions régulières. D'après ce dont je me souviens, il accepterait volontiers le nom "Null". Je ne l'ai pas essayé cependant.

Quelqu'un pourrait-il expliquer les détails techniques de cette situation? La validation du formulaire est-elle en train de faire un string == NULL ou quelque chose? Même ainsi, je ne pense pas que NULL is same as "NULL".

55
Souradeep Nanda

J'ai vu des interfaces de base de données (par exemple des bibliothèques de framework) qui retournent 'null' comme une chaîne pour les colonnes nulles. Je crois qu'il y avait un indicateur qui activerait ou désactiverait le débogage. Cet indicateur permet aux développeurs de déterminer facilement si le champ vide était le résultat d'une valeur nulle ou d'une valeur vide. Il s'agit d'un mauvais paramètre, en particulier dans la production, et expliquerait les problèmes expliqués dans l'article.

Le traitement inverse de la conversion de "null" en 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.

42
BillThor

Il y a de fortes chances qu'une bonne 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. Tout à fait raisonnable car il s'agit d'un écrit destiné à la 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 causés au niveau de 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, un programmeur aurait pu écrire une condition du type "quelqu'un 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 SQL pourrait également être responsable du mauvais traitement mentionné de Null, ou du nom de famille hawaïen qui contient une citation unique, qui est également le délimiteur de chaîne SQL standard.

Une application qui transforme incorrectement 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.

25

L'article lui-même comprend un lien vers un Stack Overflow question 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 soi, 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 en XML.

19
Dour High Arch

Je ne pense pas avoir mentionné une chose: nous ne parlons pas seulement de SQL.

Le nom peut commencer/se terminer dans la base de données ... mais pour y arriver, cela implique normalement 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 du pipeline peut impliquer la conversion de données d'un format dans un autre. Des tables Sql, au json, au xml, au CSV, etc ...

À tout moment dans cette chaîne compliquée, cela ne prendra qu'une place de mauvaise programmation ou un langage de programmation flou (Javascript gestion nulle par exemple) ...

Alors ne vous limitez pas au problème d'être dans la base de données ... car il peut être n'importe où dans la "pile".

13
WernerCD

Réponse Wiki de la communauté pour les différents liens initialement laissés comme commentaires sur cette question populaire

8
Paul White 9

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 un client - quel sexe devrait-elle avoir?

Un indicateur spécial est utilisé pour indiquer qu'une valeur est manquante. Ce drapeau spécial est NULL. Une programmation bâclée peut donc confondre l'indicateur de valeur manquante - NULL - avec 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 mais ne pas 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 bâclé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.

4
Michael Green

Il y a beaucoup de logiciels mal écrits, et même des frameworks, 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 les écrans et les imprimés et pensent que c'est une erreur et que la suppression de la personne est une autre cause probable?

2
MGOwen