Wenn der Name einer Person Null ist, wie würde dann die Datenbank beschädigt?


55

Ich habe diesen Artikel auf BBC gelesen . Es erzählt die Geschichte einer Person namens Jenifer Null und wie sie mit alltäglichen Problemen konfrontiert ist, wenn sie Online-Datenbanken wie die Buchung von Flugtickets, Net Banking usw. nutzt.

Ich kenne mich mit Datenbanken nicht gut aus und benutze sie nicht sehr oft. Als ich eine Website zum Lernen erstellte, verwendete die serverseitige Formularüberprüfung reguläre Ausdrücke. Soweit ich mich erinnere, würde es gerne den Namen "Null" annehmen. Ich habe es aber nicht ausprobiert.

Könnte jemand die technischen Details erklären, wann diese Situation eintreten würde? Funktioniert die Formularvalidierung nur so string == NULLoder so? Trotzdem denke ich nicht NULL is same as "NULL".


32
Der Artikel wurde offensichtlich von einem Journalisten verfasst. Nullen sind die Ursache vieler Verwirrungen, man würde nicht erwarten, dass ein Journalist weniger verwirrt ist.
Ypercubeᵀᴹ

2
Jeder: Kommentare mit Links zu verwandten Fragen oder Artikeln wurden in eine der folgenden Community-Wiki-Antworten verschoben . Bearbeiten Sie diese Antwort (oder schlagen Sie eine Änderung vor), anstatt weitere Links auf dieser Seite hinzuzufügen.
Paul White

Antworten:


42

Ich habe Datenbankschnittstellen (z. B. Framework-Bibliotheken) gesehen, die 'null' als Zeichenfolge für Nullspalten zurückgeben. Ich glaube, es gab eine Flagge, die dies zum Debuggen ein- oder ausschalten würde. Mit diesem Flag können Entwickler auf einfache Weise feststellen, ob das leere Feld das Ergebnis eines Nullwerts oder eines leeren Werts war. Dies ist eine schlechte Einstellung, insbesondere in der Produktion, und würde die im Artikel erläuterten Probleme erklären.

Die umgekehrte Verarbeitung der Konvertierung von 'null' in einen Nullwert sollte einen Anwendungsfehler für ein Namensfeld erzeugen. Ich würde erwarten, dass dies ziemlich schnell gelöst wird.


In der Tat ist dies in den Frameworks für untypisierte Sprachen, in denen alle Daten in eine Zeichenfolge konvertiert werden, weit verbreitet. Es ist ein paar Jahre her, seit ich daran gearbeitet habe, aber ich glaube, dass frühe Versionen von ColdFusion dieses Problem hatten.
Jules

25

Es besteht eine gute Chance, dass ein guter Teil Ihrer Verwirrung vom Journalisten stammt. Der Artikel befasst sich mit Problemen bei der Verwendung ganzer Anwendungssysteme, nicht nur von Datenbanken. Völlig vernünftig, da dies eine Schrift ist, die auf den Massenkonsum abzielt, aber technische Details vom Autor beschönigt oder missverstanden werden.

Einige dieser Probleme werden wahrscheinlich eher auf der Anwendungsebene als auf der API der Datenbank verursacht. Magische Werte sind ein Anti-Muster, das in der Branche auf lächerliche Weise nur schwer auszumerzen ist. Sehr leicht hätte ein Programmierer eine Bedingung nach dem Motto "Jemand hat 'null' eingegeben? Sie müssen bedeuten, dass es keinen Wert gibt, denn das ist, was null bedeutet!" Ein irrtümlicher Versuch, die SQL-Injektion zu verhindern, könnte auch für die erwähnte Misshandlung von Null oder des hawaiianischen Nachnamens verantwortlich sein, der ein einfaches Anführungszeichen enthält, das auch das standardmäßige SQL-Zeichenfolgen-Trennzeichen ist.

Eine Anwendung, die diese Werte falsch in NULL oder eine leere Zeichenfolge umwandelt, kann leicht zu Fehlern führen, wenn Geschäftslogik- oder DB-Einschränkungen etwas anderes erwarten. Dies führt natürlich zu genau der frustrierenden Benutzererfahrung, die im Artikel beschrieben wird.


5
Ich wusste nicht, dass O'Brian Hawaiianer ist.
Glglgl

19

Der Artikel selbst enthält einen Link zu einer Stapelüberlauf-Frage , die das Problem veranschaulicht. Es war in einer Flex-Anwendung, in der der Code:

currentChild.appendChild("Fred");

würde ein Element, das das Wort enthält, Fredan ein XML-Dokument anhängen, aber den Code:

currentChild.appendChild("null");

würde ein leeres Element anhängen, kein Element, das den Text "null" enthält.

XML, per se, hat kein Problem mit dem Textwert "NULL", so einschließlich solchen Text würde kein Problem sein. In der Tat NULLhat überhaupt keine besondere Bedeutung in XML.


13

Eine Sache, von der ich glaube nicht gesehen zu haben, dass sie erwähnt wird: Wir sprechen nicht nur über SQL.

Der Name kann in der Datenbank beginnen / enden. Um dorthin zu gelangen, sind normalerweise MEHRERE Kanäle erforderlich. Datenbank, SQL, PHP, HTML, Javascript ... Java, C #, VB, Perl, Phython, Ruby, Bash, Batch, etc, etc, etc ...

Bei jedem dieser Schritte in der Pipeline werden möglicherweise Daten von einem Format in ein anderes konvertiert. Von SQL-Tabellen, zu JSON, zu XML, zu CSV, etc ...

An jedem Punkt in dieser komplizierten Kette wird es nur eine Stelle schlechter Programmierung oder einer Fuzzy-Programmiersprache erfordern (Javascript- Nullbehandlung zum Beispiel) ...

Beschränken Sie sich also nicht auf das Problem in der Datenbank, da es sich an einer beliebigen Stelle im "Stapel" befinden kann.


8

Community Wiki Antwort für die verschiedenen Links, die ursprünglich als Kommentare zu dieser beliebten Frage hinterlassen wurden


4

Relationale Datenbanken müssen fehlende oder irrelevante Werte aufnehmen. Beispielsweise kann die Kundenliste eine Mobiltelefonnummer oder ein Geschlecht enthalten. Was ist, wenn ein Unternehmen Kunde werden möchte - welches Geschlecht sollte es haben?

Ein spezieller Indikator zeigt an, dass ein Wert fehlt. Diese spezielle Flagge ist NULL. So kann eine fehlerhafte Programmierung dazu führen, dass der Indikator für fehlende Werte - NULL - mit dem Nachnamen von Jennifer Null verwechselt wird, wobei der Nachname möglicherweise als fehlende Daten und nicht als tatsächlicher Wert interpretiert wird.

Es ist ein bisschen so, als würde man ein Bankkonto eröffnen, aber kein Geld einzahlen. Der Saldo ist Null. Dies bedeutet nicht, dass Sie kein Gleichgewicht haben. Es bedeutet, dass Sie ein Guthaben haben und der Wert "0" ist. Aber schlampige Programmierung könnte die Null als "nicht vorhanden" interpretieren und feststellen, dass Sie überhaupt kein Konto haben.


2

Es gibt viele schlecht geschriebene Software und sogar Frameworks, die sich bei jemandem mit dem Namen Null merkwürdig verhalten würden.

Aber vergessen wir nicht das menschliche Element: Vielleicht denken Menschen, dass es ein Fehler ist, den Namen auf Bildschirmen und Ausdrucken zu sehen, und dass das Löschen der Person eine weitere wahrscheinliche Ursache ist?

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.