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?Technisch gesehen sind Nullen in der relationalen Mathematik, auf der die relationale Datenbank basiert, illegal. Vom rein technischen, semantischen Standpunkt des relationalen Modells aus gesehen, sind sie also nicht in Ordnung.
In der realen Welt sind Denormalisierung und einige Verstöße gegen das Modell in Ordnung. Aber im Allgemeinen sind Nullen ein Indikator dafür, dass Sie Ihren Gesamtentwurf genauer unter die Lupe nehmen sollten.
Ich bin immer sehr vorsichtig mit Nullen und versuche, sie so weit wie möglich auszugleichen. Das heißt aber nicht, dass sie nicht manchmal die beste Wahl sind. Aber ich würde mich definitiv auf die Seite der "keine Nullen" neigen, es sei denn, Sie sind wirklich sicher, dass die Nullen in Ihrer speziellen Basis besser ist.
Ich denke, die Frage läuft darauf hinaus, was ein Wert von NULL für Sie bedeuten soll. Ja, es gibt viele Interpretationen für einen NULL-Wert, aber einige von ihnen, die hier gepostet wurden, sollten niemals verwendet werden. Die wahre Bedeutung von NULL wird durch den Kontext Ihrer Anwendung bestimmt und sollte nie mehr als eine Sache bedeuten. Ein Vorschlag war zum Beispiel, dass NULL in einem Geburtsdatenfeld bedeuten würde, dass die Person noch lebt. Dies ist gefährlich.
In aller Einfachheit: Definieren Sie NULL und bleiben Sie dabei. Ich verwende es, um zu sagen, dass der Wert in diesem Feld zu diesem Zeitpunkt unbekannt ist. Es bedeutet das und NUR das. Wenn Sie es brauchen, um etwas anderes zu bedeuten, dann müssen Sie Ihr Datenmodell überdenken.
Ich persönlich bin der Meinung, dass Nullen nur dann verwendet werden sollten, wenn Sie das Feld als Fremdschlüssel zu einer anderen Tabelle verwenden, um zu symbolisieren, dass dieser Datensatz nicht mit irgendetwas in der anderen Tabelle verknüpft ist. Ansonsten finde ich, dass Nullwerte bei der Programmierung von Anwendungslogik sehr lästig sind. Da es in den meisten Programmiersprachen für viele Datentypen keine direkte Darstellung einer Datenbank-Null gibt, entsteht eine Menge Anwendungscode, um mit der Bedeutung dieser Nullwerte umzugehen. Wenn eine DB auf eine ganze Zahl mit dem Wert Null stößt und beispielsweise versucht, einen Wert von 1 hinzuzufügen (auch bekannt als Null + 1), gibt die Datenbank Null zurück, da die Logik so definiert ist. Wenn eine Programmiersprache jedoch versucht, null und 1 zu addieren, wird in der Regel eine Ausnahme ausgelöst. Ihr Code ist also übersät mit Überprüfungen, was zu tun ist, wenn der Wert Null ist, was oft nur eine Konvertierung in 0 für Zahlen, einen leeren String für Text und ein Null-Datum (1900/1/1?) für Datumsfelder bedeutet.
Es geht also um Normalisierung gegenüber Benutzerfreundlichkeit und Leistungsproblemen.
Wenn Sie sich an die vollständigen Normalisierungsregeln halten, werden Sie am Ende etwas schreiben, das so aussieht:
Select c.id, c.lastname,....... from kunde c left join Kundennummer cpn on c.id = cpn.customerid left join kundenadresse ca on c.id = ca.kundennummer left join kundenphonennummer2 cpn2 on c.id = cpn2.kundennummer etc, etc, etc
Es scheint, dass, wenn null im Kontext des Attributs gültig ist, es erlaubt sein sollte.
Aber was bedeutet Null mittlere ? Das ist der Knackpunkt. Es heißt "kein Wert", aber es gibt ein Dutzend verschiedener Gründe, warum es keinen Wert geben könnte, und "null" gibt keinen Hinweis darauf, welchen es in diesem Fall meint. (Noch nicht gesetzt, nicht anwendbar auf diese Instanz, nicht anwendbar auf diesen Typ, nicht bekannt, nicht ermittelbar, nicht gefunden, Fehler, Programmfehler, ...)
Dies ist in Java sehr üblich, wo Objektreferenzen oft null sind.
Es gibt eine Denkschule, die besagt Null-Referenzen sind auch dort schlecht . Gleiches Problem: Was bedeutet null mittlere ?
IIRC, Java hat sowohl "null" und "uninitialized" (obwohl keine Syntax für die letztere). Gosling erkannte also die Torheit, "null" für jede Art von "kein Wert" zu verwenden. Aber warum aufhören mit nur zwei ?
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.