Ich habe ein bisschen darüber nachgedacht, um zu versuchen, positiv zu sein und die Notwendigkeit zu rechtfertigen, einen beliebigen Wert anstelle einer Null zu verwenden, und es scheint (zumindest für mich) keinen gültigen Grund dafür zu geben, außer vielleicht in einem geschlossenen Data-Mining-Datensatz um die Leistung und Abfragen zu verbessern und zu vereinfachen, und zwar nur in Fällen, in denen die Zahlen keine Werte sind, die die Daten verzerren könnten. Auch dies müsste sorgfältig abgewogen werden. In allen Situationen der realen Welt ist es keine gute Praxis, Null zu bewerten. Dadurch wird eine NOT NULL-Spaltendefinition von Ihrem Freund an Ihren Feind weitergegeben, da dies nicht der Fall ist.
Es ist etwas ganz anderes zu sagen, dass unsere Anwendung für einige (oder sogar alle) Spalten keinen NULL-Wert akzeptieren sollte. Dies ist eine vernünftige und bewährte Vorgehensweise, und es gibt gut dokumentierte Vorteile, wenn Nullen nicht zugelassen werden (z. B. Schlüssel und Indizes und statistische Berechnungen). Das Zuweisen eines Werts für "An der Stelle einer Null sitzen" ist jedoch keineswegs gleich. Dies ist die Rute für Ihren eigenen Rücken, da Sie zuerst einen Wert auswählen müssen, der niemals verwendet wird. Filtern Sie diesen Wert wie die Null heraus und denken Sie daran, ihn nicht in Berechnungen und Zusammenfassungen zu verwenden und ihn aus externen Datenfeeds zu entfernen . Dies ist mindestens genauso schlimm, wenn Sie eine Null verwenden, um einen tatsächlichen Wert darzustellen, was Sie sich selbst mitteilen, aber nicht.
Die meisten Probleme, die durch Nullen verursacht werden, können behoben werden (bessere Normalisierung, funktionsbasierte Indizes, Bitmap-Indizes oder ein einfaches WHERE x IS NOT NULL). Glauben Sie, dass bei einigen großen Telekommunikationsunternehmen oder bei Amazon in der monatlichen Leistungsbesprechung ein DBA diesen großartigen Plan umreißt, um die Abfragen ihrer enormen Datensätze ein wenig zu beschleunigen, indem Sie null durch einen beliebigen Wert ersetzen, etwa -5000 oder was auch immer - Ich bin offen für den Wert ... ". Oder glauben Sie, dass sie ihre Zeit zwischen einem besseren Anwendungsdesign, um unerwünschte Nullen herauszufiltern, und einer Abfrageoptimierung auf der Grundlage der tatsächlich erhaltenen Daten aufwenden ? OK, in Ordnung, vielleicht ist ein monatliches Treffen ein bisschen optimistisch, aber wenn es passiert, kann ich Ihnen versichern, dass "Ersetzen von Nullen durch -5000 (oder was auch immer) für eine bessere API" kein Tagesordnungspunkt ist.
Für mich ist es in Ordnung zu sagen, dass ich fehlende Daten nicht akzeptiere (Sie müssen ein Alter oder einen Preis oder einen Regionalcode oder was auch immer haben) und manchmal sogar in Ordnung zu sagen, dass für diese Spalte ein Standardwert eingegeben wird, wenn du legst nichts anderes. Es ist nicht in Ordnung, einen Wert auf null zu setzen. Denken Sie als Beispiel an Felder mit mittlerem Namen. Manchmal existieren diese nicht, da die Eltern zu faul sind, um alle Felder auszufüllen. Fügen wir unseren Daten "keine" oder "fehlende" oder "unbekannte" hinzu, um unsere Suche zu verbessern? Nein, weil es seltsame Personen geben kann, die ihre Namen in diese Werte ändern. Wenn wir die Daten ausdrucken, wissen wir nicht, ob wir sie aufnehmen müssen oder nicht. Es ist ein einfaches, aber weitreichendes Beispiel. Wir kennen NULL und haben vorhersehbare eingebaute Funktionen, um damit umzugehen. Sie können dies nicht besser codieren.
Wenn keine Antwort (oder NULL) keine gültige Antwort auf Ihre Eingabeanforderung ist, lassen Sie sie in der Anwendung oder in der Datenbank nicht zu. Wenn es sich um eine gute Antwort handelt, müssen Sie sie sowohl in Ihrer Anwendung als auch in Ihrer Datenbank zulassen und bearbeiten es als gültige Antwort. Wenn es Teil einer Reihe gültiger Antworten ist, muss Ihre Datenbank so konzipiert sein, dass sie diese speichert. Schließlich sagt man nicht hey, Zahlenfelder sind so langweilig, dass man Zahlen in Blobs speichern und Bilder von wilden Tieren verwenden kann, um jede Zahl darzustellen, denn das ist verrückt (cool, aber verrückt). Wir entscheiden auch nicht, dass uns der Buchstabe B nicht gefällt, und ersetzen ihn wie ein grausamer Albtraum in der Sesamstraße durch ein # in unseren Daten. Wenn B keine Antwort ist, die wir wollen, sagen wir dem Benutzer "Hey, du kannst hier kein B setzen". Warum also null anders behandeln?
Vermeiden Sie also Nullen, die Sie auf Anwendungsebene nicht möchten, und bearbeiten Sie sie in Ihrer Datenbank, wo Sie sie ansonsten akzeptieren, so sicher wie giraffe + giraffe = hippo, dass Ihre sinnlosen Datenprobleme Sie in Schwierigkeiten bringen.