2 Stimmen

Spalte Nullbarkeit/Optionalität: NULL vs. NOT NULL

Gibt es einen Grund für oder gegen die Festlegung einiger Felder als NULL o NOT NULL in einer Mysql-Tabelle, abgesehen von Primär-/Fremdschlüsselfeldern?

5voto

Nathan Taylor Punkte 24098

Das hängt ganz von Ihrem Bereich ab, um ehrlich zu sein. Funktional macht es kaum einen Unterschied zur Datenbank-Engine, aber wenn Sie eine gut definierte Domäne haben wollen, ist es oft am besten, wenn sowohl die Datenbank- als auch die Anwendungsschicht die Anforderungen widerspiegeln, die Sie an den Benutzer stellen.

Wenn es Ihnen egal ist, ob der Benutzer seinen "Anzeigenamen" eingibt oder nicht, dann markieren Sie die Spalte auf jeden Fall als löschbar. Wenn Sie jedoch einen "Anzeigenamen" benötigen, sollten Sie ihn in der Datenbank als ungültig kennzeichnen und die Einschränkung in der Anwendung erzwingen. Indem Sie die Einschränkung verdoppeln, stellen Sie sicher, dass die Domäne immer noch vollständig qualifiziert ist, sollte sich Ihr Front-End ändern.

3voto

pix0r Punkte 30911

MySQL hat eine NOT NULL Bedingung auf ein Feld anwenden, aber das wird Sie nicht daran hindern, "leere" Daten einzufügen. Es gibt keine Möglichkeit, ein Feld als "erforderlich" zu kennzeichnen.

Wie Pekka bereits erwähnt hat, sollten Sie eine Art von Validierung durchführen, um dies auf einer höheren Ebene in Ihrer Anwendung zu verhindern.

3voto

OMG Ponies Punkte 312816

Das ist keine MySQL-spezifische Sache - jede Datenbank, die mir bekannt ist, erlaubt die Definition von Spalten mit einer Einschränkung, die entweder eine NULL Wert in der Spalte, oder lässt dies nicht zu.

Definieren einer Spalte als NOT NULL bedeutet, dass immer ein Wert vorhanden sein muss, der dem Datentyp entspricht. NULL ist ein Sentinel-Wert, dessen Datentyp über das hinausgeht, was für die Spalte definiert ist.

Handelt es sich bei der Spalte um einen Fremdschlüssel, muss der Wert auch bereits in der Bezugstabelle vorhanden sein vor fügen Sie den Wert in die aktuelle Tabelle ein. DEFAULT Einschränkungen sind üblich, aber nicht notwendig, für Spalten, die als NOT NULL so dass die Spalten mit einem geeigneten Wert gefüllt werden, wenn versucht wurde, NULL in diese Spalten einzufügen. Zurück zu den Fremdschlüsseln: Eine Fremdschlüsselspalte kann nullbar sein, was bedeutet, dass die Beziehung optional - die Geschäftsregeln erlauben es, dass es keine Beziehung gibt.

Wann sollten NULL und NOT NULL verwendet werden?


Im Idealfall sollte jede Spalte NOT NULL aber es hängt wirklich davon ab, was die Geschäftsregeln erfordern.

2voto

Pekka Punkte 429407

Ich weiß nicht, wie Sie ein erforderliches Feld in mySQL definieren würden, möchten Sie mich aufklären? Ich weiß es wirklich nicht.

Aber selbst wenn dies möglich wäre, kann ich mir kaum ein Szenario vorstellen, in dem es Sinn machen würde. IMO müsste man fehlerhafte (=falsch leere) Daten viel früher validieren. Die Validierung, Bereinigung und das Ausschneiden sollten lange vor der Eingabe von Daten in die Datenbank erfolgen. Ein Datenbankfehler sollte nur dann auftreten, wenn etwas Außergewöhnliches passiert, z. B. wenn die Datenbank physisch nicht erreichbar ist.

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