SQL-Primär- und Fremdschlüssel?
Hallo zusammen,
ich beschäftige mich seit kurzem mit SQL und habe auf iMoodle ein paar Übungen gemacht.
Mir ist nicht ganz klar, wie entschieden wird, welchen Schlüssel man beim JOIN zuerst angibt, da es bei den Übungen unterschiedlich ist, aber immer nur eine Möglichkeit als richtig gesehen wird.
Aus meiner Sicht gibt man immer "Fremdschlüssel = Primärschlüssel" an. Allerdings gab es da eine sehr unübersichtliche Tabelle, sodass meiner Meinung nach beide Tabellen einen Fremdschlüssel für die jeweils andere hatten. Woher soll ich denn wissen, welche Tabelle dann "die Erste" ist?
Und wieso ist es bei manchen Übungen so, dass "Primärschlüssel = Fremdschlüssel" die einzig richtige Lösung ist?
Freue mich über Hilfe, vielen Dank!
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.
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.
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ß