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?Nullen können schwer zu handhaben sein, aber in manchen Fällen sind sie sinnvoll.
Angenommen, Sie haben eine Rechnungstabelle mit einer Spalte "PaidDate", die einen Datumswert hat. Was geben Sie in diese Spalte ein, bevor die Rechnung bezahlt wurde (vorausgesetzt, Sie wissen nicht im Voraus, wann sie bezahlt wird)? Eine leere Zeichenkette kann es nicht sein, da dies kein gültiges Datum ist. Es macht keinen Sinn, ein beliebiges Datum einzugeben (z. B. 1.1.1900), weil dieses Datum einfach nicht korrekt ist. Es scheint, dass der einzig sinnvolle Wert NULL ist, weil er keinen Wert hat.
Die Arbeit mit Nullen in einer Datenbank birgt einige Herausforderungen, aber Datenbanken können damit gut umgehen. Die wirklichen Probleme treten auf, wenn Sie Nullen aus Ihrer Datenbank in Ihren Anwendungscode laden. Hier habe ich festgestellt, dass die Dinge schwieriger sind. In .NET ist zum Beispiel ein Datum in einem stark typisierten Dataset (das die DB-Struktur nachahmt) ein Wertetyp und kann nicht null sein. Sie müssen also Workarounds entwickeln.
Vermeiden Sie Nullen, wenn Sie können, aber schließen Sie sie nicht aus, denn sie haben ihre Berechtigung.
Für eine Datenbank bedeutet null: "Ich habe keinen Wert dafür". Das bedeutet, dass (interessanterweise) eine boolesche Spalte, die Nullen zulässt, vollkommen akzeptabel ist und in vielen Datenbankschemata vorkommt. Wenn Sie dagegen einen booleschen Wert in Ihrem Code haben, der den Wert 'true', 'false' oder 'undefined' annehmen kann, werden Sie Ihren Code früher oder später wahrscheinlich auf thedailywtf sehen :)
Wenn Sie also die Möglichkeit zulassen müssen, dass ein Feld überhaupt keinen Wert hat, dann ist es durchaus akzeptabel, Nullen in der Spalte zuzulassen. Es ist wesentlich besser als die möglichen Alternativen (leere Zeichenfolgen, Null usw.)
Ich glaube, Sie verwechseln die konzeptionelle Datenmodellierung mit der physischen Datenmodellierung.
Wenn ein Objekt in CDMs ein optionales Feld hat, sollten Sie das Objekt untertype und ein neues Objekt erstellen, wenn das Feld nicht null ist. Das ist die Theorie in CDMs
In der physischen Welt gehen wir alle möglichen Kompromisse für die reale Welt ein. In der realen Welt sind NULLEN mehr als in Ordnung, sie sind unerlässlich
Bei schrittweisen Datenerfassungssystemen werden Sie feststellen, dass Sie Nullen in einer Datenbank nicht vermeiden können, da die Reihenfolge der Fragen bzw. der Datenerfassung nur selten dem logischen Datenmodell entspricht.
Oder Sie können die Werte voreinstellen (und benötigen Code, um diese Standardwerte zu verarbeiten). Sie können zum Beispiel davon ausgehen, dass alle Strings in Ihrem Modell leer sind und nicht null.
Oder Sie können Staging-Datenbanktabellen für die Datenerfassung einrichten, die so lange bestehen bleiben, bis alle Daten erfasst sind, bevor Sie die eigentlichen Datenbanktabellen auffüllen. Das ist eine Menge zusätzlicher Arbeit.
Null bedeutet keinen Wert, während 0 keinen Wert bedeutet. Wenn Sie eine 0 sehen, wissen Sie nicht, was sie bedeutet, wenn Sie eine Null sehen, wissen Sie, dass es sich um einen fehlenden Wert handelt.
Ich denke, Nullen sind viel klarer, 0 und '' sind verwirrend, da sie die Absicht des gespeicherten Wertes nicht deutlich machen.
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.