2009-03-17 24 views
11

Ok. Also ich weiß was ein Primärschlüssel in DB ist. Wenn Sie eine Tabelle in einer Datenbank haben, ist ein Primärschlüssel ein einzelner Wert, der für jede Zeile in Ihrer Tabelle eindeutig ist. Zum Beispiel:Was genau ist ein Fremdschlüssel?

id | name | whatever 
------------------------- 
1  Alice  .... 
2  Bob  .... 
45  Eve  .... 
988 ....  .... 

Also brauche ich ein gutes, einfaches Beispiel, um zu erklären, was genau ein Fremdschlüssel ist. Weil ich es einfach nicht :)


Edit: OK, es ist ziemlich einfach, ich glaube, ich war das Problem zu verkomplizieren.

Also eine letzte Frage, die einzige Einschränkung für Fremdschlüssel ist, dass sie ein gültiger Primärschlüsselwert in der Tabelle sind, auf die ich mich beziehe?

+0

"die einzige Einschränkung für Fremdschlüssel ist ..." Das ist keine "Einschränkung", das ist die Definition: ein FK ist ein gültiger Primärschlüssel in einer anderen Tabelle. –

+0

"... ein Primärschlüssel ist ein einzelner Wert ..." Ja, solange Sie erkennen, dass "Wert" nicht gleichbedeutend mit "Spalte" ist. Es ist vollkommen gültig, dass der Primärschlüssel mehrere Werte aufweist. –

+0

Grrr. Kommentare können nicht bearbeitet werden. Der letzte Satz sollte lauten: "Es ist vollkommen gültig, dass der Primärschlüssel mehrere Spalten hat". –

Antwort

21

Ein Fremdschlüssel ist ein Feld, das auf einen Primärschlüssel einer anderen Tabelle verweist.

Beispiel:

Table Name - Users 

UserID UserName UserRoleID 
1   JohnD  1 
2   CourtneyC 1 
3   Benjamin 2 

Table Name - UserRoles 

UserRoleID Desc 
1    Admin 
2    Moderator 

Sie, dass Users.UserRoleID sehen kann, ist ein Fremdschlüssel, die auf den Primärschlüssel UserRoles.UserRoleID Punkte

Die Verwendung von Fremdschlüsseln macht einfache Beziehungen zu anderen Tabellen einrichten , so dass Sie die Daten mehrerer Tabellen in einer schönen Weise miteinander verbinden:

Beispiel:

SELECT 
    a.UserID, 
    a.UserName, 
    b.Desc as [UserRole] 
FROM 
    Users a INNER JOIN 
     UserRoles b ON a.UserRoleID = b.UserRoleID 

Ausgang wäre dann:

UserID UserName User Role 
1   JohnD  Admin 
2   CourneyC Admin 
3   Benjamin Moderator 
0

In einer relationalen Datenbank eine Eins-zu-viele-Beziehung, indem er dem Kind Tabellenverweis die ID der übergeordneten Tabelle implementiert wird. Die übergeordnete ID in der Child-Tabelle wird als Fremdschlüssel bezeichnet, da sie einen Primärschlüssel einer anderen Tabelle referenziert.

12

Angenommen, Sie haben ein anderes Feld haben, die die Heimatstadt ist:

id | name | city 
------------------------- 
1  Alice  San Francisco 
2  Bob  New York 
45  Eve  New York 
988 Bill  San Francisco 

Nun ist es nicht sinnvoll, die gleichen Städte in vielen Zeilen zu wiederholen. Dies könnte zu Tippfehlern, übermäßiger Platznutzung, Schwierigkeiten beim Aufrufen von Ergebnissen und anderen Problemen führen. So verwenden Sie einen Fremdschlüssel:

id | name | fk_city 
------------------------- 
1  Alice  1 
2  Bob  2 
45  Eve  2 
988 Bill  1 

Heimatstadt Tabelle:

id | name 
------------------------- 
1 | San Francisco 
2 | New York 

Hoffe, es macht die Dinge für Sie klarer. :-)

Update: über Ihre letzte Frage: Ja. :-)

3

Ein Fremdschlüssel ist eine Spalte in einer Tabelle, die etwas in einer anderen Tabelle eindeutig identifizieren soll. Daher sollten die Werte den Primärschlüsseln in dieser anderen Tabelle entsprechen.

Zum Beispiel, wenn Sie eine Tabelle von Studenten haben, die Kurse belegen, würde jeder Datensatz eine Studenten-ID und eine Kurs-ID enthalten. Dies sind Fremdschlüssel in einer Schüler-Tabelle (wo es für jede Schüler-ID einen Datensatz gibt) und eine Kurstabelle (wo es für jede Kurs-ID einen Datensatz gibt).

Referenzielle Integrität bedeutet, dass alle Fremdschlüssel den Primärschlüsseln in diesen Zieltabellen entsprechen. Zum Beispiel entsprechen alle Schüler-IDs und Kurs-IDs in Ihrer Registrierungstabelle echten Schüler-IDs und Kurs-IDs.

0

Ein Fremdschlüssel ist ein Feld, das auf eine andere Tabelle in der Datenbank verweist. Angenommen, Sie hatten 2 Tabellen, PERSON und ADDRESS. Es gibt ein Feld in PERSON namens ID und ein Feld in ADDRESS namens PERSON_ID. Sie würden PERSON_ID auf PERSON.ID als Fremdschlüssel beziehen. Dies bedeutet, dass Sie keine Adresse haben können, die nicht mit einer Person verbunden ist, da der Wert im Feld ADDRESS.PERSON_ID in der Tabelle PERSON vorhanden sein muss.

1
id | name | whatever | countryid 
------------------------------------- 
1  Alice  ....  13 
2  Bob  ....  42 
45  Eve  ....  1 
988 ....  ....  2 

id | countryid 
---------------- 
1  Japan 
2  Spain 
13  Norway 
42  Italy 

die Fremdschlüsselpunkte von der Person-Tabelle (ersten) auf eine Zeile in der Ländertabelle (zweiten)

0

Tisch Beispiel verwenden, vorausgesetzt, dass Sie eine andere Tabelle haben:

cartid | id | itemid 
----------------------- 
100  1  abc 
101  1  cde 

In dieser Tabelle ist der Primärschlüssel die Karteikarte, der Fremdschlüssel ist die ID, die mit Ihrer ersten Tabelle verknüpft wäre. Benutzer 1 hat zwei Wagen, wobei jeder Wagen jeweils einen Gegenstand hat.

ein Fremdschlüssel ist das, was Sie verwenden, um zwei oder mehr Tabellen zu verknüpfen, die verwandte Informationen zueinander haben.

0

Ein Fremdschlüssel ist der Primärschlüssel aus einer anderen Tabelle, die auf Ihrem Tisch gespeichert ist. Angenommen, Sie haben eine Tabelle mit Kunden und eine Tabelle mit Aufträgen. Die CustomerId ist wahrscheinlich der Primärschlüssel in der Kundentabelle, und die OrderId ist wahrscheinlich der Primärschlüssel in der Auftragstabelle. Aber in der Bestellungstabelle müssen Sie den Kunden für diese Bestellung kennen, nein? Daher müssen Sie die CustomerId in der Auftragstabelle speichern. In diesem Fall ist die CustomerId in der Auftragstabelle ein Fremdschlüssel.

Ich möchte darauf hinweisen, dass kein Primärschlüssel (und daher ein Fremdschlüssel) eine einzelne Spalte sein muss. Es ist einfacher, sicher. Aber ich habe an Unternehmenssystemen gearbeitet, wo der Primärschlüssel 11 Spalten lang war, und ich bin mir sicher, dass es Beispiele gibt, die länger sind. Das heißt, Sie müssen den Wert für 11 verschiedene Spalten kennen, bevor Sie die Zeile eindeutig identifizieren können.