82 Stimmen

Sind Nullen in einer relationalen Datenbank in Ordnung?

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.

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.

3voto

Jim Punkte 11015

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.

3voto

Dan Punkte 58216

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.)

3voto

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

3voto

JeeBee Punkte 17329

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.

3voto

SQLMenace Punkte 128184

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X