web-dev-qa-db-de.com

Was ist der Unterschied zwischen Fremdschlüssel und Referenzschlüssel?

Ich bin sehr verwirrt über diese beiden Begriffe. Sind sie gleich oder verschieden?

Einige Bücher und Leute sagen, dass sie gleich sind und andere sagen, dass sie verschieden sind.

Ich habe es versucht, konnte aber keine schlüssige Antwort finden.

25
Anderson

Ich nehme an, dass Sie davon sprechen, die REFERENCES zu verwenden, wenn das FOREIGN KEY-Schlüsselwort nicht verwendet wird, z.

author_id INTEGER REFERENCES author(id)

... anstatt ...

author_id INTEGER,
FOREIGN KEY(author_id) REFERENCES author(id)

Die Antwort ist, dass es sich um eine Kurzschreibweise für dasselbe handelt. Beim Wechseln zwischen beiden sollte das Hauptaugenmerk auf die Lesbarkeit gerichtet sein.

48

"Referenzschlüssel" ist kein normaler Fachbegriff bei der relationalen Modellierung oder bei der SQL-Implementierung in US-Englisch. 

Ein Fremdschlüssel "referenziert" einen Schlüssel in einer anderen Tabelle. Könnte das der Grund sein, wo die Verwirrung herkommt?

Sie bezeichnen nicht wirklich einen reference-Schlüssel ... Sie sind dasselbe ... Sie könnten das Word referenzen sehen, das zum Beispiel in sqlite verwendet wird: Sie könnten eine Syntax wie folgt verwenden, um ein db von Autoren und Büchern. So können Sie zeigen, dass ein Autor viele Bücher haben kann. Dies teilt der Datenbank mit, dass books.author_id (ein paar Zeilen definiert ist) author.id referenziert. 

CREATE TABLE 'author' (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    firstname varchar(255)
    lastname varchar(255)
);

CREATE TABLE 'books' (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    author_id INTEGER,
    title varchar(255),
    published date,
    FOREIGN KEY(author_id) REFERENCES author(id)
);
6
maneesha

Vielleicht verwenden Sie den Begriff "Referenzschlüssel" etwas lose?

Ein Fremdschlüsselwert in einer Zeile soll die Zeile "referenzieren", die den entsprechenden Schlüsselwert enthält. Beachten Sie, dass das Wort "reference" im vorherigen Satz ein Verb ist. Wir können also sagen, dass wir einen referenzierten Fremdschlüsselwert und einen referenzierten Schlüsselwert haben. 

Obwohl nicht auf die Tabellenschlüsseleinschränkung, sondern auf die Schlüsselwerte, verwiesen wird, könnte man sagen, dass man mit "referenzierter Schlüssel" die Zeilen bezeichnet, die die Werte enthalten, die möglicherweise referenziert werden. Ich sehe dann, wie "referenzierter Schlüssel" zu "referenzierter Schlüssel" werden könnte, aber nicht an seinen Ursprung glaubt.

3
onedaywhen

Ein Fremdschlüssel muss verweist auf einen Primärschlüssel ..__ Wenn Sie die REFERENCES-Einschränkung verwenden, muss der referenzierte Schlüssel nicht unbedingt ein Primärschlüssel sein. 

2
alpha

Ein Fremdschlüssel "referenziert" einen Schlüssel in einer anderen Tabelle. Dieser Schlüssel in einer anderen Tabelle wird als referenzierter Schlüssel bezeichnet. Sie werden wahrscheinlich viel darüber erfahren, wenn Sie die Grafikfunktion für phpmyadmin verwenden.

2
Matt Junior

Der einzige und wichtigste Unterschied zwischen den beiden Schlüsselwörtern "FOREIGN KEY" und "REFERENCES" besteht darin, dass beide die Daten zu untergeordneten Daten der übergeordneten Tabelle machen. Mit "FOREIGN KEY" wird dagegen eine Tabellenebeneneinschränkung erstellt Das Schlüsselwort REFERENCES kann nur zum Erstellen von Einschränkungen auf Spaltenebene verwendet werden. Einschränkungen auf Spaltenebene können nur beim Erstellen der Tabelle erstellt werden. Einschränkungen auf Tabellenebene können jedoch mit dem Befehl ALTER TABLE hinzugefügt werden.

1
user7901336

Es gibt zwei Möglichkeiten, einen oder mehrere Fremdschlüssel zu deklarieren:

  1. wenn der Fremdschlüssel ein SINGLE-Attribut ist:
    VERWEISE ()

  2. wenn Fremdschlüssel eine LISTE von Attributen sind

AUSLÄNDISCHER SCHLÜSSEL () VERWEISE 

1