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?
Antworten
Zu viele Anzeigen?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.
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.
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.
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.