wake-up-neo.com

können wir einen Fremdschlüssel haben, der in keiner anderen Tabelle ein Primärschlüssel ist?

in jedem Buch wird geschrieben, dass Fremdschlüssel tatsächlich Primärschlüssel in einer anderen Tabelle sind, aber können wir einen Fremdschlüssel haben, der in keiner anderen Tabelle Primärschlüssel ist 

36
Mac

Ja - Sie können einen Fremdschlüssel haben, der auf einen eindeutigen Index in einer anderen Tabelle verweist.

CREATE UNIQUE INDEX UX01_YourTable ON dbo.YourTable(SomeUniqueColumn)

ALTER TABLE dbo.YourChildTable
   ADD CONSTRAINT FK_ChildTable_Table
   FOREIGN KEY(YourFKColumn) REFERENCES dbo.YourTable(SomeUniqueColumn)
42
marc_s

Per Definition muss ein Fremdschlüssel auf einen Kandidatenschlüssel einer Tabelle verweisen. Es muss nicht unbedingt der Primärschlüssel sein.

Im Detail entspricht die Einschränkung, die in SQL als FOREIGN KEY bezeichnet wird, nicht genau der Lehrbuchdefinition eines Fremdschlüssels im relationalen Modell. Die FOREIGN KEY-Einschränkung von SQL unterscheidet sich aus folgenden Gründen:

  • es kann auf jeden Satz von Spalten verweisen, der einer Eindeutigkeitsbeschränkung unterliegt, auch wenn es sich nicht um Kandidatenschlüssel handelt (beispielsweise Superschlüssel oder Spalten mit Nullwert).
  • es kann Nullen enthalten. In diesem Fall wird die Einschränkung nicht erzwungen
  • ihre Syntax hängt von der Reihenfolge der Spalten ab. Daher unterscheidet sich eine fk-Einschränkung für die Referenzierung (A, B) (A, B) von einer Einschränkung für die Referenzierung (A, B) (A, B).
14
nvogel

Ja, es kann einen Fremdschlüssel geben, der ein eindeutiger Schlüssel in einer anderen Tabelle ist, da Eindeutiger Schlüssel eine Untermenge des Primärschlüssels ist, nicht jedoch der genaue Primärschlüssel. 

Das ist also möglich, dass der Fremdschlüssel in einer anderen Tabelle ein eindeutiger Schlüssel ist.

3
Giriraj Gupta

Allgemeine Standardantwort ist nein. Dies ist nur möglich, wenn der Fremdschlüssel eine Spalte in einer anderen Tabelle eindeutig referenziert. Das heißt, der Fremdschlüssel muss der Kandidatenschlüssel in einer anderen Tabelle sein, und der Primärschlüssel ist auch ein Kandidatenschlüssel der Tabelle.

0
Riaj Ferdous