Frage

Ja, eine andere NULL vs leere Zeichenkette Frage.

ich mit dem Gedanken zustimmen, dass NULL bedeutet nicht gesetzt ist, während leere Zeichenkette bedeutet „einen Wert, der leer ist“. Hier ist mein Problem. Wenn der Standardwert für eine Spalte NULL ist, wie ermögliche ich der Benutzer diese NULL eingeben

Nehmen wir an, ein neuer Benutzer auf einem System erstellt wird. Es gibt einen Vor- und Nachnamen Feld; Nachname ist erforderlich, während der erste Name nicht ist. Wenn der Benutzer erstellen, wird die Person 2 Texteingaben sehen, eine für erste und eine für letzte. Die Person wählt nur den Nachnamen eingeben. Der erste Name ist technisch nicht festgelegt. Während des Einsatzes prüfe ich die Länge der einzelnen Felder, alle Felder, die Einstellung auf NULL leer sind.

Wenn in der Datenbank suchen, ich sehe, dass der erste Name nicht gesetzt ist. Die Frage, die sofort den Sinn kommt, ist, dass vielleicht nie sie den Vornamen Feld sah (dh aufgrund eines Fehlers). Aber das ist nicht der Fall; sie bleiben, wenn leer.

Also, meine Frage ist, wie Sie entscheiden, wenn ein Feld Benutzereingabe auf NULL oder eine leere Zeichenfolge gesetzt werden soll, wenn zu erhalten? Wie wissen Sie, dass der Benutzer das Feld will nicht ohne Nachweis Fokus gesetzt werden, oder wenn sie einen Wert gelöscht ... oder ... oder ...?

Verwandte Frage: Soll ich NULL verwenden oder eine leere Zeichenfolge keine Daten in Tabellenspalten darzustellen?

War es hilfreich?

Lösung

ich so gut wie nie NULL verwenden, wenn die tatsächlichen Daten beziehen. Wenn für Fremdschlüssel verwendet wird, würde ich sagen, dass NULL gültig ist, aber es ist so gut wie nie gültig für Benutzerdaten eingegeben. Die einzige Ausnahme, die wahrscheinlich ziemlich regelmäßig kommen würde ist für Termine, die nicht, wie ein Mitarbeiter-Datenbank mit einem „termination_date“ Feld existieren. In diesem Fall sollten alle derzeitigen Mitarbeiter in diesem Feld einen Wert von NULL haben. Was bekommen sie für die Werte eingeben tatsächlich einen Nullwert, die wirklich einen Nullwert benötigen, würde ich ein Kontrollkästchen neben dem Eingabefeld gelegt, so dass der Benutzer sie auf überprüfen und aus den entsprechenden Wert zu sehen, auf null (oder auf eine benutzerfreundliche Art und Weise, keine). Wenn Sie das Kontrollkästchen ermöglicht das Feld auf Null gesetzt, sollte das entsprechende Textfeld deaktiviert werden, und wenn ein Nullwert bereits eingestellt ist, sollte es als deaktiviert beginnen, und nur dann aktiviert werden, sobald der Benutzer deaktiviert die null Checkbox.

Andere Tipps

Ich werde das Muster brechen, und sage, dass ich immer NULL für leere Zeichenfolge, aus den folgenden Gründen.

verwenden würde,
  1. Wenn Sie beginnen, die Auswirkungen von Rohlingen Fein schneiden, dann müssen Sie sicherstellen, irgendwie, dass jeder andere Entwickler liest und schreibt sie auf die gleiche Weise.

  2. Wie alphabetize Sie es?

  3. Können Sie eindeutig bestimmen, wann ein Benutzer einen Wert weggelassen Eingabe, verglichen mit absichtlich so dass es leer ist?

  4. Wie würden Sie eindeutig für den Unterschied abfragen? Kann ein Benutzerabfrage Bildschirm NULL zeigt vs. leere Standardeingabeformular Syntax?

  5. In der Praxis habe ich noch nie aus dem Lesen und Schreiben von Daten unter Verwendung von Standard, unsurprising Verhalten mit dieser Regel verboten. Wenn ich gebraucht habe den Unterschied zu kennen, habe ich ein boolesches Feld verwendet (die eindeutigen UI-Geräte zur Karte ist einfacher). In einem Fall habe ich einen Trigger Wahr => NULL-Wert zu erzwingen, aber nie sah sie aufgerufen, weil die BR-Schicht effektiv den Zustand herausgefiltert werden.

Wenn der Benutzer einen leeren String liefert, ich habe es immer so behandeln, als null aus der Datenbank Perspektive. Darüber hinaus werde ich normalerweise meine String-Eingänge trimmen führende / nachfolgende Leerzeichen zu entfernen und dann für leere zu überprüfen. Es ist ein kleiner Sieg in der Datenbank mit varchar () Typen und es verringert auch die Fälle, für die Suche, da ich nur für name is null überprüfen muß statt name is null or name = '' Sie auch in die andere Richtung gehen könnten, Umwandlung null '. So oder so, einen Weg wählen und konsistent sein.

Was Sie tun müssen, ist herauszufinden, was Verhalten Sie wollen. Es gibt keine eine feste Algebra, wie Name Strings interpretiert werden.

Denken Sie an die Zustandsmaschine hier: Sie Felder haben, die mehrere Zustände haben: es slounds wie Sie über einen Zustand der „unitialized“, ein anderer „absichtlich leer“ und eine dritte mit einem gewissen Sollwert zu denken. Alles, was Sie, dass diese Zuordnung macht und mit dem Rest des Programms in Einklang werden finden; es klingt wie die einfache Zuordnung ist

NULL → uninitialized
„“ → gezielt ungesetzt
ein Name → initialisiert.

Ich versuche, die Dinge einfach zu halten. In diesem Fall würde ich die erste Spalte Name nicht-nullable machen und Rohlinge erlauben. Andernfalls werden Sie drei Fällen zu tun haben überall verweisen Sie auf diesem Gebiet:

  1. Blank Vorname
  2. Null Vorname
  3. Non-Rohling Vorname

Wenn Sie gehen mit ‚leer ist null‘ oder ‚null ist leer,‘ dann bist du auf zwei Fälle. Zwei Fälle sind besser als drei.

beantworten, um Ihre Frage: die Benutzerdaten wahrscheinlich nicht (und sollte nicht) wissen nichts über die Eingabe, was eine „Null“ ist und wie es zu einem „leeren“ vergleicht. Dieses Problem sollte sauber und konsequent im System gelöst werden. - nicht der UI

Während Ihr Beispiel hauptsächlich für Streicher ist, möchte ich sagen, dass ich für numerische und Boolesche Felder null verwenden. Ein accountbalance von 0 ist ganz anders als ich als eine, die null ist. Das Gleiche gilt für booleans, wenn die Menschen einen Multiple-Choice-Test mit echten und falschen Antworten nehmen, ist es sehr wichtig zu wissen, ob jemand beantwortete wahr oder falsch oder gar nicht beantworten. Nicht null Verwendung in diesen Fällen würde mich erfordert eine zusätzliche Tabelle oder eine andere Einrichtung zu haben, um zu sehen, ob jemand eine Frage beantwortet. Sie könnten zum Beispiel verwenden -1 für nicht in 0 für falsch und 1 für wahr gefüllt, aber dann sind Sie ein numerisches Feld für etwas verwenden, das im Wesentlichen ein boolean ist.

Ich habe noch nie, hatte jemals eine Verwendung für einen Nullwert im Produktionscode. Ein leerer String ist ein feiner Sentinel-Wert für ein leeres Feld Namen, Telefonnummer oder Jahreseinkommen für jede Anwendung. Das heißt, ich bin sicher, dass Sie einige Verwendung für sie finden konnte, aber ich denke, es ist überstrapaziert. Wenn I waren einen NULL-Wert verwenden, aber ich denke, ich es verwenden würde irgendwo möchte ich einen leeren Wert darzustellen.

Ich habe immer NULL für nicht initialisierte Werte, empty für absichtlich leer Werte und 0 für Off Indikatoren verwendet.

Dadurch das die ganze Zeit, es ist da, auch wenn ich es nicht benutzen werde, aber ich habe nichts anderes tun, wenn ich diese Unterscheidung muß.

Ich teste in der Regel für empty(), aber manchmal für isset() Ich überprüfe die false auf NULL auswertet. Dies ist nützlich für Erinnerungen, bestimmte Fragen zu beantworten. Wenn es empty, false oder 0 ist dann die Frage beantwortet wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top