Nullwert

Nullwert

Als Nullwert (kurz NULL, NIL oder ()) bezeichnet man in der Informatik einen Zustand, der das Fehlen eines Wertes anzeigen soll. Nach Edgar F. Codd unterscheidet man zwei Arten von NULL: die Abwesenheit eines Wertes, weil keiner existiert ("property inapplicable"), oder die Abwesenheit, da man den Wert (noch) nicht kennt ("value at present unknown")[1]. Ein Nullwert steht für die Abwesenheit eines Wertes, ein Nullwert ist aber gleichzeitig ein Wert.

Der Nullwert ist verschieden von dem Wert "" (eine leere Zeichenkette) oder der Zahl 0, da diese einen Wert, also eine Information repräsentieren.

Sprachlich wird gelegentlich der Nullwert von der algebraischen Zahl 0 durch die Aussprache unterschieden, indem (wie im Englischen) 'nʌl gesprochen wird, um Missverständnisse zu vermeiden.

Inhaltsverzeichnis

Beispiel 1

Folgendes Beispiel verdeutlicht die Bedeutung von NULL in Datenbanken und Programmen: In einer Datentabelle sollen Ärzte je eine Diagnose pro Patient eintragen, nachdem sie diesen untersucht haben. Was bedeutet es nun, wenn in dieser Tabelle zu einem Patienten keine Diagnose eingetragen ist? Ist er gesund oder einfach noch nicht untersucht?

In Papierlisten ist es deshalb üblich, leere Felder durchzustreichen, um zu verdeutlichen, dass das Feld bewusst bearbeitet wurde und es tatsächlich leer sein soll. In Datenbanken haben Felder, die noch nicht bearbeitet wurden (oder die aus anderen Gründen keinen Wert enthalten), den Wert NULL. Sobald man gezielt einen Wert einträgt, verschwindet NULL und der eingetragene Wert, der auch leer (keine Diagnose, also gesund) sein kann, wird gespeichert.

Beispiel 2

Man denke sich, in einer Datenbank oder einer langen Liste sollen die Telefonnummern von Studenten gespeichert werden. Man definiert also, dass eine Spalte der Tabelle nur Zahlen enthalten darf. Trifft man nun auf einen Studenten, der kein Telefon besitzt, so würde man anstelle der Telefonnummer in sein Telefonnummernfeld wahrscheinlich einen Strich setzen, oder vielleicht das Zeichen "n/a" oder ein Fragezeichen. All diese Zeichen sollen bedeuten: Wert nicht bekannt oder nicht vorhanden. Genau das erledigt bei elektronischer Speicherung der Nullwert.

Darstellung im Computer

Möchte man in einer Computerliste so einen „Strich“ setzen, braucht dieser „Strich“ eine digitale Darstellungsform. Es gibt hier zwei Herangehensweisen:

Gleichsetzung vereinbarter gültiger Werte mit Undefiniertheit

Hierbei erwählt man einen formal gültigen Wert des Feldes willkürlich als Nullwert. Welcher der Nullwert ist, wird entweder aus dem Kontext ersichtlich oder muss explizit dokumentiert werden.

Sind in einer Tabelle Zitate von Aposteln angegeben, so könnte man in die letzte Spalte Zahlenwerte von 1 bis 12 schreiben, die angeben, welcher der Apostel Jesu hier zitiert wird. Ist es unbekannt, könnte man nun den Wert 13 oder −1 hinschreiben, und damit meinen, dass nicht bekannt ist, welcher es war, oder ob es überhaupt ein Jünger Jesu war, oder dass mit Sicherheit kein Jünger Jesu zitiert wird.

Der Vorteil dieser Methode ist, dass man grundsätzlich dabei Speicherplatz spart. Der Nachteil ist, dass ein ursprünglich als Nullwert definierter Wert in Konflikt mit einem tatsächlichen Wert kommen kann. Denke man bei obiger Liste an einen Nullwert 13, so kann es ja passieren, dass eines Tages der Apostel Paulus zitiert wird, und ihm die Zahl 13 zugewiesen wird, die nun vielleicht unbemerkt im Konflikt steht mit einem Zitat Goethes.

Dieses Problem ist in der Vergangenheit wiederholt aufgetreten, unter anderem als Jahr-2000-Problem.

Nullwert als grundverschiedener Wert

Um obiges Problem zu vermeiden, kann man den Nullwert unmissverständlich von den gültigen Werten trennen, indem man ein besonderes Zeichen einführt, das in allen Kontexten immer nur ein Nullwert ist.

Eine technische Umsetzung bietet sich bei Programmiersprachen an, die Variablen als Zeiger erlauben, also gewissermaßen als Link quer durch den Arbeitsspeicher zu einem gültigen Wert. Nun kann man eine bestimmte Stelle im Arbeitsspeicher bestimmen, die als Nullwert – und nur als Nullwert – verstanden wird. Nun enthielte obige Liste in der Tabellenspalte keine Zahlen mehr, sondern nur noch Zeiger auf die gesuchten Zahlen. Es kann so nicht zu Verwechslungen mit gültigen Werten kommen.

In der Programmiersprache C existiert für diesen Zweck der so genannte „Nullzeiger“ (engl. "null pointer"). Im Programmtext kann eine Nullzeiger-Konstante ("null pointer constant") durch eine (beliebige) "integer constant expression" (ein konstanter ganzzahliger Ausdruck, der gewissen Bedingungen genügen muss) mit Wert 0‚ optional mit einem Cast nach void* versehen, ausgedrückt werden (ISO/IEC 9899:1999 6.3.2.3 Abs. 3). Die C-Standard-Bibliothek stellt ein Makro NULL zur Verfügung, welches zu einem solchen Ausdruck expandiert[2].

In C++ kann eine Nullzeiger-Konstante keinen Cast nach void* enthalten (ISO/IEC 14882:1998 4.10 Abs. 1), dies gilt in C++ infolge auch für das Standard-Makro NULL, welches daher in C++ meist nur zum Integer-Wert 0 expandiert. In C++0x wurde ein neues Schlüsselwort nullptr eingeführt, das für die Nullzeigerkonstante steht und in einen beliebigen Zeigertyp konvertiert werden kann.

In C# ist null der Standardwert für Referenz-Typen wie Object, String oder List. Es ist daher bei der Verwendung dieser Typen von Wichtigkeit, diese vor der Verwendung zu initialisieren, beziehungsweise vor der Verwendung zu prüfen, ob die Variable derzeit den Wert null besitzt.[3] Simple Typen wie int können hingegen nicht mit null belegt werden und müssen daher mit einem echten Wert wie 0 belegt werden. Seit C# 2.0 gibt es jedoch auch die Möglichkeit der Verwendung von sogenannten Nullable Typen, die es erlauben, auch simple Typen wie int oder bool mit null zu belegen. [4]

Andere Programmiersprachen, etwa Java, stellen ein dediziertes Schlüsselwort für den Nullwert zur Verfügung. In manchen dynamisch getypten Sprachen wie Smalltalk gibt es ein spezielles vordefiniertes Null-Objekt, das die Funktion eines kanonischen Nullwertes übernimmt.

NULL in SQL-Datenbanken

Relationale Datenbanksysteme setzen eine Dreiwertige Logik ein, die in der Abfrage- und Aktualisierungssprache SQL realisiert wird: Hier gilt Unknown als dritter Wahrheitswert neben False und True. Die üblichen logischen Verknüpfungen Und und Oder werden angepasst, indem man False=0, True=1 und Unknown=½ setzt. Dann gilt zwischen zwei Wahrheitswerten a, b:   a Und b = min(a,b)   sowie   a Oder b = max(a,b).

In SQL ist NULL kein Wert, da die grundlegende Eigenschaft von Werten, nämlich sie mit anderen Werten des gleichen Datentyps vergleichen zu können, nicht das gewünschte Ergebnis liefert. Beispielsweise ergibt das Prädikat Spalte = NULL immer unknown, auch wenn ein Wert in der Spalte NULL ist. Statt dessen müssen die Prädikate IS NULL und IS NOT NULL verwendet werden, um einen Wert auf NULL zu testen.

Einerseits spricht man von der sogenannten don’t know-Unbestimmtheit und meint damit die bereits beschriebene Unkenntnis des Wertes, andererseits gibt es die sogenannte don’t care-Unbestimmtheit, die in Datenbanken auftritt, wenn ein Datensatz einen bestimmten Wert ganz einfach nicht benötigt. Ein leicht einsehbares Beispiel ist der Fall einer Dokumentendatenbank, in der eine Tabelle mit verschiedenen multimedialen Dokumenten verwaltet wird – zum Beispiel Bücher und CDs. Die Tabelle kann neben allgemeinen Angaben wie Name, Thema, Regalstandort auch medienspezifische Spalten wie ISBN oder Interpreten haben. In diesem Fall hätten alle Einträge über CDs in der Spalte ISBN NULL als Wert, da in der Regel nur Bücher eine ISBN haben. Dementsprechend hätten die meisten Bücher (Ausnahme Hörbücher) in der Spalte Interpret eine NULL stehen, da Bücher eher von Autoren als von Interpreten erstellt werden.

Die gängige Lehrmeinung besagt nun aber, dass das Auftreten von don’t care-Unbestimmtheiten auf Fehler im Entwurf der Datenbank hinweist. Kurzum sollte die Datenbank von vornherein so geplant sein und implementiert werden, dass don’t care-NULLen nie auftreten.

C.J. Date und Hugh Darwen weisen im The Third Manifesto auf die Problematik von NULL in relationalen Datenbanksystemen hin und kritisieren, dass der NULL Wert in selbigen nicht eindeutig ist, da er entweder auf "unbekannt" oder "nicht existent" hinweisen kann. Sie erläutern im Third Manifesto wie man eine relationale Datenbank ohne der Verwendung von NULL strukturieren kann, indem man Werte die NULL enthalten können in eigene Beziehungstabellen normalisiert. [5]

Verschiedene Repräsentationen des Nullwertes

NIL

Einige Programmiersprachen (beispielsweise Pascal, LISP, Smalltalk, Ruby, Objective-C) verwenden die Bezeichnung nil, anstatt Null' oder null. Nil steht einerseits für englisch not in list, also nicht in der Liste. Dies hat historische Gründe, es entstammt der Programmiersprache LISP, die als einzige Datenstruktur den in Blattrichtung verketteten Binärbaum kennt, der aber gewöhnlich nur zur Darstellung einfach verketteter Listen genutzt wird. Die Bezeichnung wurde auch für andere Programmiersprachen übernommen, da das lateinische Wort nil soviel bedeutet wie nichts.

NIL ist beim Computersystem Amiga von Commodore auch ein Device. Lenkt man zum Beispiel eine Datei nach >NIL: um, so verschiebt man die Ausgabe praktisch ins Nichts, die Datei wird nicht gelöscht. Dies entspricht /dev/null unter Unix.

None

Weiterhin ist teilweise die Bezeichnung None für einen Nullwert gebräuchlich, wie z. B. in der Programmiersprache Python.

Nothing

Nothing stellt einen Nullwert in der Programmiersprache Visual Basic dar.

NaN

NaN (engl. NAN oder NaN, not a number) für Gleitkommazahlen nach der Norm IEEE 754 besitzen ebenfalls für „keinen Wert“. NaN sind reservierte Bitmuster, die verschieden sind von jedem erlaubten Wert. NAN ist beispielsweise Ergebnis der Division „0 durch 0“.

Not Null

Das aus der Datenbanksprache SQL entlehnte Sprachkonstrukt „not null“ (engl. für auf jeden Fall ein Wert) beschreibt die Anforderung, dass NULL in einem ausgezeichneten Zusammenhang unzulässig ist. In SQL ist NOT NULL ein sehr gebräuchlicher Constraint, also eine Integritätsbedingung, deren Einhaltung von der Software grundsätzlich erzwungen wird.

So wird in der Beschreibung von Bedienoberflächen durch den Hinweis not null darauf hingewiesen, dass ein Datenfeld in der Ausgabe grundsätzlich befüllt und/oder beim Erfassen grundsätzlich nicht leer gelassen werden darf. Im Regelfall wird die Bedeutung von nicht leer in letzterem Fall etwas großzügiger ausgelegt, dass in jedem Fall ein zulässiger Wert eingetragen werden muss, was beispielsweise Leerzeichen-Folgen ausschließen kann.

Verwandte Begriffe

Ähnlich einem Nullwert ist der Begriff der leeren Menge. Sie ist eine Menge, die keine Elemente enthält. Ein Nullwert wird nicht als Menge verstanden, daher ist eine Unterscheidung notwendig. Auch verschieden ist die algebraische 0, das neutrale Element der Addition. Die algebraische 0 ist über die Addition definiert, ein Nullwert aber kann nicht addiert werden.

NUL

NUL ist eine häufige Abkürzung für das Nullzeichen.

Unter dem Namen NUL wird außerdem von vielen Betriebssystemen (z. B. MS-DOS und Windows) ein virtuelles Ausgabegerät definiert, das die aufgenommenen Daten einfach verwirft. Durch Umleitung nach NUL kann beispielsweise eine unerwünschte Ausgabe eines Befehls unterdrückt werden. Dies entspricht /dev/null unter UNIX.

Siehe auch

Einzelnachweise

  1. E. F. Codd: Extending the Database Relational Model to Capture More Meaning 1979, Abschnitt 2.3. S. 7
  2. Kernighan/Ritchie: Programmieren in C (Zweite Ausgabe) 1990, S. 99
  3. MSDN null (C# Reference) (englisch), abgerufen am 6. Mai 2011
  4. MSDN Nullable Types (C# Programming Guide) (englisch), abgerufen am 6. Mai 2011
  5. The Third Manifesto - Date & Darwen (englisch), abgerufen am 6. Mai 2011

Wikimedia Foundation.

Игры ⚽ Нужно решить контрольную?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Nullwert — nulinė vertė statusas T sritis fizika atitikmenys: angl. zero value vok. Nullwert, m rus. нулевое значение, n pranc. valeur nulle, f; valeur zéro, f …   Fizikos terminų žodynas

  • Dreipunktverhalten mit Nullwert — apgrąžinis trilygis poveikis statusas T sritis radioelektronika atitikmenys: angl. positive negative three step action vok. Dreipunktverhalten mit Nullwert, n; Positiv Negativ Dreipunktwirkung, f rus. реверсивное трёхпозиционное воздействие, n… …   Radioelektronikos terminų žodynas

  • NULL — Dieser Artikel behandelt den Betriff des Nullwerts aus der EDV; zu weiteren Bedeutungen von Null siehe 0. Als Nullwert (kurz NULL, NIL oder ()) bezeichnet man in der Informatik einen Zustand, der das Fehlen eines Wertes anzeigen soll. Nach Edgar… …   Deutsch Wikipedia

  • Null (EDV) — Dieser Artikel behandelt den Betriff des Nullwerts aus der EDV; zu weiteren Bedeutungen von Null siehe 0. Als Nullwert (kurz NULL, NIL oder ()) bezeichnet man in der Informatik einen Zustand, der das Fehlen eines Wertes anzeigen soll. Nach Edgar… …   Deutsch Wikipedia

  • Null (Informatik) — Dieser Artikel behandelt den Betriff des Nullwerts aus der EDV; zu weiteren Bedeutungen von Null siehe 0. Als Nullwert (kurz NULL, NIL oder ()) bezeichnet man in der Informatik einen Zustand, der das Fehlen eines Wertes anzeigen soll. Nach Edgar… …   Deutsch Wikipedia

  • Nullzeiger — Dieser Artikel behandelt den Betriff des Nullwerts aus der EDV; zu weiteren Bedeutungen von Null siehe 0. Als Nullwert (kurz NULL, NIL oder ()) bezeichnet man in der Informatik einen Zustand, der das Fehlen eines Wertes anzeigen soll. Nach Edgar… …   Deutsch Wikipedia

  • Undefinierter Wert — Dieser Artikel behandelt den Betriff des Nullwerts aus der EDV; zu weiteren Bedeutungen von Null siehe 0. Als Nullwert (kurz NULL, NIL oder ()) bezeichnet man in der Informatik einen Zustand, der das Fehlen eines Wertes anzeigen soll. Nach Edgar… …   Deutsch Wikipedia

  • SQL-92 — SQL (das Kürzel für Structured Query Language; offizielle Aussprache [ɛskjuːˈɛl], häufig auch [ˈsiːkwəl] →SEQUEL), ist eine Datenbanksprache zur Definition, Abfrage und Manipulation von Daten in relationalen Datenbanken. SQL ist von ANSI und ISO… …   Deutsch Wikipedia

  • SQL-99 — SQL (das Kürzel für Structured Query Language; offizielle Aussprache [ɛskjuːˈɛl], häufig auch [ˈsiːkwəl] →SEQUEL), ist eine Datenbanksprache zur Definition, Abfrage und Manipulation von Daten in relationalen Datenbanken. SQL ist von ANSI und ISO… …   Deutsch Wikipedia

  • Structured Query Language — SQL (das Kürzel für Structured Query Language; offizielle Aussprache [ɛskjuːˈɛl], häufig auch [ˈsiːkwəl] →SEQUEL), ist eine Datenbanksprache zur Definition, Abfrage und Manipulation von Daten in relationalen Datenbanken. SQL ist von ANSI und ISO… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”