it-swarm.com.de

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

Ich habe this 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 das Buchen von Flugtickets, Net Banking usw. verwendet.

Ich bin nicht gut mit Datenbanken vertraut und benutze sie nicht sehr oft. Als ich eine Website zum Lernen erstellte, wurden bei der serverseitigen Formularvalidierung reguläre Ausdrücke verwendet. Soweit ich mich erinnere, würde es gerne den Namen "Null" akzeptieren. Ich habe es aber nicht versucht.

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

55
Souradeep Nanda

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 leicht feststellen, ob das leere Feld ein 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.

42
BillThor

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.

Wahrscheinlich werden einige dieser Probleme eher auf der Anwendungsebene als auf der API der Datenbank verursacht. Magische Werte sind ein Anti-Muster, das aus der Branche lächerlich 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 bedeutet null!" Ein fehlgeleiteter Versuch, die SQL-Injection 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 Standard-SQL-Zeichenfolgenbegrenzer ist.

Eine Anwendung, die diese Werte falsch in NULL oder eine leere Zeichenfolge umwandelt, kann leicht Fehler verursachen, 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.

25

Der Artikel selbst enthält einen Link zu einem Stack Overflow-Frage , der das Problem demonstriert. Es war in einer Flex-Anwendung, in der der Code:

currentChild.appendChild("Fred");

würde ein Element mit dem Wort Fred an 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 an sich hat kein Problem mit dem Text Wert "NULL", daher wäre das Einschließen eines solchen Textes kein Problem. Tatsächlich hat NULL in XML überhaupt keine besondere Bedeutung.

19
Dour High Arch

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

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

Jeder dieser Schritte in der Pipeline kann das Konvertieren von Daten von einem Format in ein anderes umfassen. Von SQL-Tabellen über JSON, XML bis hin zu CSV usw.

Zu jedem Zeitpunkt in dieser komplizierten Kette wird nur ein Punkt schlechter Programmierung oder einer unscharfen Programmiersprache benötigt (Javascript Null-Behandlung zum Beispiel) ...

Beschränken Sie sich also nicht auf das Problem in der Datenbank ... denn es kann sich überall im "Stapel" befinden.

13
WernerCD

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

8
Paul White 9

Relationale Datenbanken müssen fehlende oder irrelevante Werte berücksichtigen. 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. Eine schlampige Programmierung kann daher dazu führen, dass der Indikator für fehlende Werte - NULL - mit dem Nachnamen von Jennifer Null verwechselt wird und ihr Nachname möglicherweise eher als fehlende Daten als als tatsächlicher Wert interpretiert wird.

Es ist ein bisschen wie ein Bankkonto zu eröffnen, aber kein Geld einzuzahlen. Der Saldo ist Null. Dies bedeutet nicht, dass Sie kein Gleichgewicht haben. Es bedeutet, dass Sie ein Guthaben haben und der Wert "0" ist. Eine schlampige Programmierung kann jedoch die Null als "existiert nicht" falsch interpretieren und feststellen, dass Sie überhaupt kein Konto haben.

4
Michael Green

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

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

2
MGOwen