Als CS-Student habe ich im Laufe der Jahre eine anständige Anzahl von Programmiersprachen gelernt, von denen die meisten das Konzept eines "nullbaren" oder "optionalen" Typs hatten. Beachten Sie, dass ich nicht über Nullzeiger oder Referenzen oder schwach typisierte Sprachen wie JavaScript spreche, in denen alles möglich ist null
. Beispiele für das, worüber ich spreche, sind boost::optional
(C ++), java.util.Optional
(Java 8.0), prelude.Maybe
(Haskell) und alle '?' Typen (zB int?
, float?
, C # und Kotlin). Dies sind Konstrukte, die einem zuvor nicht nullbaren Typ innerhalb eines strengen statischen Typsystems die Nullfähigkeit hinzufügen.
SQL hat ein ähnliches Konzept: Ein Typ INTEGER
, der nullbar oder nicht nullbar gemacht werden kann - aber es gibt eine Wendung. In SQL INTEGER
ist standardmäßig nullwertfähig und muss explizit so geschrieben INTEGER NOT NULL
werden, dass es nicht nullwertfähig ist.
Es erscheint mir äußerst kontraintuitiv und potenziell gefährlich, wenn NULL als Standardverhalten zugelassen wird. Offensichtlich gibt es SQL zu diesem Zeitpunkt schon so lange, dass (die meisten) SQL-Entwickler ein gesundes Bewusstsein für die Fallstricke von NULL entwickelt haben. Aber ich kann mir nur vorstellen, dass sich NULL in den frühen Tagen oft an unerwarteten und problematischen Orten eingeschlichen hat.
SQL ist älter als alle Beispiele, die ich bereitgestellt habe, daher ist es möglich, dass dies nur eine Frage der historischen Entwicklung ist. Trotzdem muss ich fragen, ob es einen guten Grund gibt, die Sprache so zu gestalten, dass Typen standardmäßig auf Null gesetzt werden können.
Wenn ja, ist dies nur ein historischer Grund oder hält die Logik dem heutigen Datenbankdesign stand?
Bearbeiten: Ich frage nicht, warum NULL ein Teil von SQL ist oder warum nullbare Spalten nützlich sind. Ich frage nur, warum Spalten standardmäßig nullbar sind . Warum schreiben wir zum Beispiel:
column1 FLOAT,
column2 FLOAT NOT NULL
Eher, als:
column1 FLOAT NULLABLE,
column2 FLOAT