SQL-Primär- und Fremdschlüssel?

4 Antworten

Bei 1:n Verbindungen ist die Tabelle mit den Primärschlüssel die Stammtabelle für die untergeordnete Tabelle.

Es hilft, wenn man sich das Schema der Datenbank grafisch auf einem Blatt Papier konstruiert, das ist besser.

Woher ich das weiß:eigene Erfahrung

Ob du

select ... 
from erste join zweite on (erste.fremd = zweite.prim)

oder

select ... 
from erste join zweite on (zweite.prim = erste.fremd)

oder

select ... 
from zweite join erste on (erste.fremd = zweite.prim)

schreibst, dürfte eigentlich egal sein.

Vielleicht habe ich dich falsch verstanden. Welche Aufgabe auf imoodle.de/sqltutorial meinst du konkret?

Hallo, prinzipiell ist es so, dass der Primärschlüssel in einer Tabelle nur einmal existiert. Es kann auch eine Kombination mehrerer Felder sein. Die ist dann aber auch einzigartig. Das wäre dann die erste Tabelle oder Haupttabelle, wenn Du so willst.

In der Sekundärtabelle kommt hingegen der Primärschlüssel der ersten Tabelle mehrmals vor. Deshalb ist es von der zweiten Tabelle aus gesehen ein Fremdschlüssel.

Beispiel:

Du hast online einen Account mit mehreren Spiele. In der 1. Tabelle stehen Deine Daten. Also Name, Emailadresse, evtl Dein Geburtsdatum usw. und die Account-ID. Diese ID ist einzigartig und somit der Primärschlüssel. Das kann natürlich auch eine Emailadresse, ein Benutzermane oder sowas sein. Aber immer etwas, was nur einmal vorkommt.

In der 2. Tabelle sind die Spiele, die Du gekauft hast, mit Deinem Account verknüpft. Da jedes Spiel ebenfalls eine eindeutige ID hat. (Die würden dann in einer 3. Tabelle stehen).

Die Verknüpfung in der 2. Tabelle würde dann im simpelsten Fall so aussehen:

Deine Account-ID / Spiel-ID1

Deine Account-ID / Spiel-ID2

Deine Account-ID / Spiel-ID3

Da in der 2. Tabelle Deine Account-ID mehrmals vorkommt, ist es ein Fremdschlüssel. In diesem Fall der Primärschlüssel der 1. Tabelle.

Ich hoffe ich hab es verständlich erklärt.

Woher ich das weiß:Berufserfahrung

Die Schlüssel sind ja einfach nur Constraints.

PKs müssen einzigartig sein.

FKs müssen in einer anderen Tabelle PKs sein.

Wenn Du die Daten erst einfügst und dann erst die Constraints setzt, dann können die Tabellen auch wechselseitig referenzieren wie sie wollen, die Daten passen ja so.

Oder was auch gemacht wird: Constraint check wird deaktiviert, alle Daten importiert und dann werden die Constraints wieder aktiviert. Wenn Dumps importiert werden macht man das gerne, damit man die Daten Tabelle für Tabelle und nicht Datensatz für Datensatz importieren kann.

Gruß