Die Datenbankentwicklungsstandards in unserer Organisation geben an, dass die Varchar-Felder keine Nullwerte zulassen sollten. Sie sollten den Standardwert einer leeren Zeichenfolge ("") haben. Ich weiß, dass das Abfragen und Verketten einfacher macht, aber heute hat mich einer meiner Mitarbeiter gefragt, warum dieser Standard nur für Varchar-Typen und nicht für andere Datentypen (int, datetime usw.) existiere. Ich würde gerne wissen, ob andere dies als einen gültigen, vertretbaren Standard betrachten, oder ob Varchar genauso behandelt werden sollte wie Felder anderer Datentypen?Varchar-Spalten: Nullable oder nicht
Ich glaube, diese Norm aus dem folgenden Grunde gilt:
Ich glaube, dass eine leere Zeichenfolge und NULL-Werte, wenn auch technisch unterschiedlich, sind vom Konzept her gleich. Eine leere Zeichenfolge mit der Länge null ist eine Zeichenfolge, die nicht existiert. Es hat keinen Wert. Ein numerischer Wert von 0 ist jedoch nicht identisch mit NULL.
Wenn beispielsweise ein Feld mit der Bezeichnung "OutstandingBalance" den Wert 0 hat, bedeutet dies, dass $ 0,00 übrig sind. Wenn das gleiche Feld jedoch NULL ist, bedeutet dies, dass der Wert unbekannt ist. Auf der anderen Seite ist ein Feld namens CustomerName mit einem Wert von "" im Grunde das gleiche wie ein Wert von NULL, da beide die Nichtexistenz des Namens darstellen.
Ich las irgendwo, dass eine Analogie für eine leere Zeichenfolge vs. NULL die einer leeren CD vs. keine CD ist. Ich glaube jedoch, dass dies eine falsche Analogie ist, da eine leere CD immer noch physisch existiert und immer noch physischen Datenraum hat, auf den keine sinnvollen Daten geschrieben sind. Grundsätzlich glaube ich, dass eine leere CD einer Leerzeichenkette ("") entspricht, keine leere Zeichenkette. Daher glaube ich, dass eine Zeichenfolge aus Leerzeichen ein von NULL getrennter tatsächlicher Wert ist, aber eine leere Zeichenfolge, die das Nichtvorhandensein eines Werts ist, der konzeptionell dem Wert NULL entspricht.
Bitte lassen Sie mich wissen, wenn meine Überzeugungen in Bezug auf Strings variabler Länge gültig sind, oder bitte erleuchten mich, wenn sie nicht sind. Ich habe mehrere Blogs/Argumente zu diesem Thema gelesen, sehe aber immer noch keinen echten konzeptionellen Unterschied zwischen NULL und leeren Strings.
+1: Geschäftsregeln Laufwerk Spaltenoptionalität, nicht Datentyp. Darüber hinaus gibt es keine Platzersparnis durch die Verwendung von NULL- oder Nulllängen-Strings: http://vampirebasic.blogspot.com/2009/01/sql-server-null-varchar-vs-empty.html –