Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Kann ein Fremdschlüssel NULL und/oder doppelt sein?

Kurze Antwort:Ja, es kann NULL oder doppelt sein.

Ich möchte erklären, warum ein Fremdschlüssel möglicherweise null oder eindeutig oder nicht eindeutig sein muss. Denken Sie zunächst daran, dass ein Fremdschlüssel einfach erfordert, dass der Wert in diesem Feld zuerst in einer anderen Tabelle (der übergeordneten Tabelle) vorhanden sein muss. Das ist alles, was ein FK per Definition ist. Null ist per Definition kein Wert. Null bedeutet, dass wir den Wert noch nicht kennen.

Lassen Sie mich Ihnen ein Beispiel aus dem wirklichen Leben geben. Angenommen, Sie haben eine Datenbank, in der Verkaufsangebote gespeichert sind. Nehmen Sie weiter an, dass jedem Angebot nur ein Vertriebsmitarbeiter und ein Kunde zugeordnet ist. Ihre Vorschlagstabelle hätte also zwei Fremdschlüssel, einen mit der Kunden-ID und einen mit der Vertriebsmitarbeiter-ID. Zum Zeitpunkt der Erstellung des Datensatzes wird jedoch nicht immer ein Vertriebsmitarbeiter zugewiesen (da noch niemand daran arbeiten kann), sodass die Kunden-ID ausgefüllt wird, die Vertriebsmitarbeiter-ID jedoch möglicherweise null ist. Mit anderen Worten, Sie benötigen normalerweise die Möglichkeit, einen Null-FK zu haben, wenn Sie seinen Wert zum Zeitpunkt der Dateneingabe möglicherweise nicht kennen, aber andere Werte in der Tabelle kennen, die eingegeben werden müssen. Um Nullen in einem FK zuzulassen, müssen Sie im Allgemeinen nur Nullen in dem Feld zulassen, das das FK enthält. Der Nullwert ist getrennt von der Idee, dass es sich um einen FK handelt.

Ob sie eindeutig ist oder nicht, hängt davon ab, ob die Tabelle eine Eins-Eins- oder eine Eins-Viele-Beziehung zur übergeordneten Tabelle hat. Wenn Sie nun eine Eins-Eins-Beziehung haben, ist es möglich, dass Sie die Daten alle in einer Tabelle haben, aber wenn die Tabelle zu breit wird oder wenn die Daten zu einem anderen Thema gehören (das Beispiel Mitarbeiter - Versicherung gab @tbone zum Beispiel), dann möchten Sie separate Tabellen mit einem FK. Sie möchten diesen FK dann entweder auch zum PK machen (was die Eindeutigkeit garantiert) oder ihm eine Eindeutigkeitsbeschränkung auferlegen.

Die meisten FKs sind für eine Eins-zu-Viele-Beziehung gedacht, und das ist es, was Sie von einem FK erhalten, ohne eine weitere Einschränkung für das Feld hinzuzufügen. So haben Sie zum Beispiel eine Bestelltabelle und die Bestelldetailstabelle. Wenn der Kunde zehn Artikel auf einmal bestellt, hat er einen Bestell- und zehn Bestelldetaildatensätze, die dieselbe Bestell-ID wie der FK enthalten.