Es gibt eine Denkschule, die besagt, dass Nullwerte in einer relationalen Datenbank nicht erlaubt sein sollten. Das heißt, das Attribut (die Spalte) einer Tabelle sollte keine Nullwerte zulassen. Da ich aus dem Bereich der Softwareentwicklung komme, verstehe ich das nicht. Es scheint so, als ob der Wert Null im Kontext des Attributs gültig ist und daher erlaubt sein sollte. Dies ist in Java sehr üblich, wo Objektreferenzen oft null sind. Da ich keine umfassende Erfahrung mit Datenbanken habe, frage ich mich, ob ich hier etwas übersehe.
Antworten
Zu viele Anzeigen?Ich stimme mit vielen der obigen Antworten überein und bin auch der Meinung, dass NULL gegebenenfalls in einem normalisierten Schemaentwurf verwendet werden kann - insbesondere dann, wenn Sie die Verwendung einer Art "magischer Zahl" oder eines Standardwerts vermeiden möchten, der wiederum irreführend sein könnte!
Letztendlich denke ich jedoch, dass die Verwendung von null gut durchdacht sein muss (und nicht standardmäßig), um einige der in den obigen Antworten aufgeführten Behauptungen zu vermeiden, insbesondere wenn NULL möglicherweise angenommen werden nichts" oder "leer", "unbekannt" oder "der Wert wurde noch nicht eingegeben" sein.
Ein Problem gibt es, wenn Sie eine Oracle-Datenbank verwenden. Wenn Sie eine leere Zeichenkette in einer Spalte vom Typ CHAR speichern, zwingt Oracle den Wert ungefragt in den NULL-Wert. Es kann also recht schwierig sein, NULL-Werte in String-Spalten in Oracle zu vermeiden.
Wenn Sie NULL-Werte verwenden, sollten Sie lernen, den SQL-Befehl COALESCE zu verwenden, insbesondere bei String-Werten. So können Sie verhindern, dass NULL-Werte in Ihre Programmiersprache einfließen. Stellen Sie sich zum Beispiel vor, dass eine Person einen Vornamen, einen Nachnamen und einen Nachnamen hat, Sie aber nur ein einziges Feld zurückgeben möchten;
SELECT FullName = COALESCE(FirstName + ' ', '') + COALESCE(MiddleName+ ' ', '') + COALESCE(FamilyName, '') FROM Person
Wenn Sie COALESCE nicht verwenden, wenn tous Spalte enthält eine NULL Wert erhalten Sie NULL zurückgegeben.
Obwohl NULLs technisch gesehen als Feldwert in Ordnung sind, sind sie häufig verpönt. Je nachdem, wie die Daten in Ihre Datenbank geschrieben werden, ist es möglich (und üblich), einen leeren String-Wert im Feld zu erhalten, im Gegensatz zu einem NULL-Wert. Jede Abfrage, die dieses Feld als Teil der WHERE-Klausel enthält, muss also beide Szenarien behandeln, was unnötige Tastenanschläge bedeutet.
Meine kontroverse Meinung für den Tag - die Voreinstellung, NULLs in Datenbankspalten zuzulassen, war wahrscheinlich die schlechteste allgemein akzeptierte Designentscheidung in ganz RDBMs Land. Jeder Anbieter macht es, und es ist falsch. NULLs sind in bestimmten, spezifischen, gut durchdachten Fällen in Ordnung, aber die Idee, dass man NULLs für jede Spalte explizit verbieten muss, macht fahrlässige Nullability viel häufiger, als sie sein sollte.
NULL Felsen. Wenn es in manchen Fällen nicht notwendig wäre, gäbe es in SQL nicht IS NULL und IS NOT NULL als Spezialfalloperatoren. NULL ist die Wurzel des konzeptionellen Universums, alles andere ist NICHT NULL. Verwenden Sie NULLs nach Belieben, wann immer es möglich ist, dass ein Datenwert nicht vorhanden ist, aber nicht fehlt. Standardwerte können NULL nur kompensieren, wenn sie immer absolut korrekt sind. Wenn ich zum Beispiel ein Ein-Bit-Feld "IsReady" habe, kann es durchaus sinnvoll sein, dass dieses Feld einen Standardwert von false hat und NULL nicht erlaubt ist. wissen dass das Was-auch-immer noch nicht fertig ist, obwohl wir das in Wirklichkeit gar nicht wissen. In einem Workflow-Szenario besteht die Möglichkeit, dass die Person, die entscheidet, ob etwas fertig ist oder nicht, noch keine Gelegenheit hatte, ihre Meinung zu äußern, so dass eine Vorgabe von "falsch" tatsächlich gefährlich sein könnte, da sie dazu verleitet, eine Entscheidung zu übersehen, die scheinbar getroffen wurde, aber in Wirklichkeit nur eine Vorgabe war.
Nebenbei bemerkt und in Bezug auf das Beispiel mit dem mittleren Anfangsbuchstaben: Mein Vater hatte keinen zweiten Vornamen, daher war sein mittlerer Anfangsbuchstabe NULL - kein Leerzeichen, keine Leerstelle oder ein Sternchen - außer bei der Armee, wo sein mittlerer Anfangsbuchstabe NMI = No Middle Initial war. Wie dumm war das denn?
0 Stimmen
Technisch gesehen ist null in der DBMS-Sprache kein Wert, sondern ein fehlender Wert, z. B. unbekannt
26 Stimmen
Es gibt eine Denkschule, die besagt, dass auch Schemata vollständig normalisiert werden sollten. Beide Schulen haben es nie in die reale Welt geschafft :)
0 Stimmen
Wenn wir NULL nicht verwenden sollten, warum sollten RDBMSs uns dann überhaupt die Verwendung von NULL erlauben? An NULL ist nichts auszusetzen, solange man weiß, wie man damit umzugehen hat. Separate Tabellen zu erstellen, um Spalten mit Nullwerten in jedem Szenario zu speichern, ist übermäßig irreführend.
3 Stimmen
Nullen sind ein Artefakt der Impedanz zwischen RDBMS und der Realität. Sie sind ein massiver systemischer Hack zur Überwindung dieser Impedanz. Die Lösung besteht nicht darin, Nullen abzuschaffen, das ist im Kontext von RDBMS nicht praktikabel. Die Lösung sind neue Arten von Datenbanken.
0 Stimmen
Die Impedanz besteht in der Tat zwischen dem Caos (der Realität) und dem menschlichen Drang zur Semantik. Entitäten, Strukturen, Typen oder was auch immer, sie alle sind Gegenstand von Veränderungen. Gehen Sie mit der polymorphen Natur eines jeden Typs um - gehen Sie mit Nullen um.