2013-12-18 10 views
7

Früher dachte ich, dass Fremdschlüssel und Sekundärschlüssel dasselbe sind.Fremdschlüssel gegen Sekundärschlüssel

Nach dem Googeln sind die Ergebnisse noch verwirrender, einige halten sie für identisch, andere sagen, dass ein Sekundärschlüssel ein Index ist, der nicht eindeutig sein muss und einen schnelleren Zugriff auf Daten ermöglicht als mit dem Primärschlüssel .

Kann jemand den Unterschied erklären?
Oder ist es tatsächlich eine gemischte Terminologie?
Kann es sich je nach Datenbanktyp unterscheiden?

Antwort

9

Die Definition in wiki/Foreign_key heißt:

Im Kontext von relationalen Datenbanken, ein Fremdschlüssel ein Feld (oder Sammlung von Feldern) in einer Tabelle, die eine Zeile eindeutig von anderer Tabelle identifiziert. Mit anderen Worten, ein Fremdschlüssel ist eine Spalte oder eine Kombination von Spalten, die verwendet wird, um eine Verknüpfung zwischen zwei Tabellen einzurichten und zu erzwingen.

Die Tabelle, die den Fremdschlüssel enthält, wird als referenzierende oder untergeordnete Tabelle bezeichnet, und die Tabelle mit dem Kandidatenschlüssel heißt referenzierte oder übergeordnete Tabelle.

Nehmen wir das Beispiel der Fall:

Ein Kunde 0,1 oder mehr Aufträge vergeben können.

Aus geschäftlicher Sicht wird jeder Kunde durch eine eindeutige ID (Primärschlüssel) identifiziert und anstatt die Kundeninformationen bei jeder Bestellung zu wiederholen, platzieren wir eine Referenz oder einen Zeiger auf diese eindeutige Kunden-ID (Kundenprimär) Schlüssel) in der Auftragstabelle. Wenn wir einen Auftrag betrachten, können wir anhand der eindeutigen Kundennummer feststellen, wer ihn platziert hat.

Die Beziehung zwischen der übergeordneten Tabelle (Customer-Tabelle) und der untergeordneten Tabelle (Order-Tabelle) wird hergestellt, wenn Sie den Wert der FK in der Auftragstabelle nach dem Einfügen der Kundenzeile festlegen. Das Löschen einer untergeordneten Zeile kann sich auch auf das übergeordnete Element auswirken, abhängig von den referenziellen Integritätszeichen (Cascading Rules), die beim Erstellen des FK erstellt wurden. FKs helfen, Integrität in einem relationalen Datenbanksystem zu etablieren.

Wie für den "Sekundärschlüssel" bezieht sich der Begriff auf eine Struktur von 1 oder mehr Spalten, die zusammen helfen, 1 oder mehr Zeilen derselben Tabelle abzurufen. Das Wort "Schlüssel" ist für einige etwas irreführend. Der Sekundärschlüssel muss nicht eindeutig sein (im Gegensatz zum PK). Es ist nicht der Primärschlüssel der Tabelle. Es wird verwendet, um Zeilen in derselben Tabelle zu finden, in der es definiert ist (im Gegensatz zum FK). Die Durchsetzung erfolgt nur durch einen Index (entweder eindeutig oder nicht) und die Implementierung ist optional. Eine Tabelle könnte 0,1 oder mehr Sekundärschlüssel haben. In einer Employee-Tabelle können Sie beispielsweise eine automatisch generierte Spalte als Primärschlüssel verwenden. Alternativ können Sie sich auch dafür entscheiden, die Mitarbeiternummer oder SSN zu verwenden, um Mitarbeiterinformationen abzurufen.

Manchmal mischen Menschen den Begriff "Sekundärschlüssel" mit dem Begriff "Kandidatenschlüssel" oder "Alternate Key" (normalerweise im Normalisierungskontext), aber sie sind alle unterschiedlich.

+0

Es gibt eine Antwort sagen, dass die sekundäre der Kandidat sein könnte, thx für die Korrektur, aber ich kann immer noch verstehen, was ist der Unterschied zwischen normalen Zeilen und der Sekundärschlüssel –

+0

Ich meine, warum würde ich einen sekundären Schlüssel erstellen, was ist Interesse, wie Sie die Informationen des Angestellten auch unter Verwendung der Feldadresse zum Beispiel oder durch Name abrufen können, und dieses Letztes konnte mehr als eine Reihe wie das Sekundär –

+0

zurückbringen Sie verursachen einen Sekundärschlüssel, um Ihnen zu helfen, Reihen in einer anderen Art zu finden ist wahrscheinlich besser für Ihren Geschäftsfall geeignet als die Nutzung des PK. Ein Mitarbeiter kann sich beispielsweise nicht an seine SSN erinnern, kann sich aber an seinen Familiennamen erinnern. Bezüglich der anderen Definition, die einen Sekundärschlüssel als Kandidatenschlüssel betrachtet, stimme ich nicht zu, da der Sekundärschlüssel nicht eindeutig sein muss, während ein Kandidatschlüssel einzigartig ist. – NoChance

3

Ein Fremdschlüssel ist ein Schlüssel, der auf einen Index einer anderen Tabelle verweist. Wenn Sie beispielsweise eine Tabelle mit Kunden haben, kann eine der Spalten in dieser Tabelle eine Länderspalte sein, die nur eine ID-Nummer enthält, die mit der ID dieses Landes in einer separaten Country-Tabelle übereinstimmt. Diese Länderspalte in der Kundentabelle wäre ein Fremdschlüssel.

Ein sekundärer Schlüssel auf der anderen Seite ist nur eine andere Spalte in der Tabelle, die Sie verwendet haben, um einen Index zu erstellen (der zur Beschleunigung von Abfragen verwendet wird). Fremdschlüssel haben nichts mit der Verbesserung der Abfragegeschwindigkeit zu tun.

1

"Sekundärschlüssel" ist kein Begriff, den ich kenne. Es erscheint nicht im Index Database Design for Mere Mortals und ich erinnere mich nicht an Pro SQL Server 2012 Relational Database Design and Implementation (meine zwei "goto" Bücher für Datenbank-Design). Es erscheint auch nicht im Index für SQL for Smarties. Es klingt, als wäre es überhaupt kein Begriff.

Ich habe immer den Begriff "Kandidatenschlüssel" verwendet.

Ein Kandidatenschlüssel ist eine Möglichkeit, eine Entität eindeutig zu identifizieren. Sie identifizieren alle Kandidatenschlüssel während der Entwurfsphase eines Datenbanksystems. Während der Implementierungsphase entscheiden Sie sich für einen Primärschlüssel: entweder einen der Kandidatenschlüssel oder einen künstlichen Schlüssel. Der Primärschlüssel wird wahrscheinlich mit einer Primärschlüsseleinschränkung implementiert; Die Kandidatenschlüssel werden wahrscheinlich mit eindeutigen Einschränkungen implementiert.

Ein Fremdschlüssel ist eine Instanz des Kandidatenschlüssels einer Entität in einer anderen Entität, die eine Beziehung zwischen den beiden Entitäten darstellt. Es wird wahrscheinlich mit einem Fremdschlüssel Einschränkungen implementiert werden.