Vermeiden Sie nullfähige "Fremdschlüssel". Sie haben mehrere Nachteile.
Die Einschränkung für eine referenzierende Zeile wird nicht immer erzwungen, wenn der Fremdschlüssel eine Null enthält. Dieses Standardverhalten ist jedoch zwischen verschiedenen DBMS nicht konsistent. Einige DBMS unterstützen Konfigurationsoptionen zum Ändern des Verhaltens nullfähiger Fremdschlüssel, andere nicht. SQL-Entwickler und -Nutzer sind sich daher möglicherweise nicht sicher, was eine nullbare Fremdschlüsseleinschränkung aus Sicht der Datenintegrität tatsächlich bedeutet. Das Portieren der Datenbank zwischen DBMS-Produkten oder sogar zwischen verschiedenen Servern, die dasselbe Produkt verwenden, kann zu inkonsistenten Ergebnissen führen.
Datenbank-Design-Tools, Integrationstools und andere Software unterstützen sie nicht immer richtig und die Ergebnisse, die sie produzieren, können falsch sein.
Fremdschlüssel werden häufig in Verknüpfungen und anderen Abfragelogiken verwendet, was die Probleme für Benutzer verschärft, die glauben, dass die Einschränkung wirksam ist, wenn sie nicht vorhanden ist oder die von Ihrem bestimmten DBMS angewendete Logik nicht kennt.
Einige Funktionen zur Abfrageoptimierung, die das Umschreiben von Abfragen und andere Optimierungen ermöglichen, sind möglicherweise nicht verfügbar, wenn ein Fremdschlüssel auf Null gesetzt werden kann.
In logischen Begriffen macht eine nullbare "Fremdschlüssel" -Beschränkung nicht viel logischen Sinn. Gemäß dem SQL-Standard darf eine solche Einschränkung nicht verletzt werden, auch wenn die Tabelle, auf die verwiesen wird, leer ist. Dies widerspricht einer der häufigsten angeblichen Rechtfertigungen für die Verwendung einer Null - dass es sich um den "unbekannten" Fall handelt. Wenn es keine gültigen Werte für X gibt, kann jedes "unbekannte" X mit Sicherheit kein gültiger Wert sein - und SQL wird dies dennoch zulassen.
Nullable Fremdschlüssel sind völlig unnötig. Sie können den Fremdschlüssel immer entweder in eine neue Tabelle zerlegen oder ein Supertyp / Subtyp-Muster verwenden, sodass keine Nullen erforderlich sind. Aus Gründen der Einfachheit und Genauigkeit ist es daher besser, Nullen wegzulassen, als sie einzugeben.