Primär- und Fremdschlüssel
Primärschlüssel
Stell dir vor, du hast einen riesigen Schrank voller Sachen, und du möchtest deiner Schwester genau sagen, was sie dir daraus holen soll. Wie machst du das am besten? Genau, mit einem einzigartigen Merkmal! In der Welt der Datenbanken nennt man dieses besondere Merkmal einen Primärschlüssel. Er bestimmt jeden Eintrag in deiner Datenbank eindeutig. Manchmal tauchen die auch für Außenstehende gut erkenntlich auf. Etwa, wenn du auf einen Link einer Webseite klickst. Dann beschreibt dieser die Seite eindeutig im Internet.
Oder, auch unabhängig von Datenbanken, wenn du einer anderen Person ganz tief in die Augen schaust.
Es gibt drei Hauptarten von Primärschlüsseln:
Der natürliche Schlüssel ist etwas, das von Natur aus einzigartig ist und bereits existiert. Beispiele dafür sind dein Fingerabdruck oder deine Iris - sie sind von Natur aus für jeden Menschen einzigartig.
Ein künstlicher Schlüssel wird extra erfunden oder zugewiesen, um etwas eindeutig zu identifizieren. Das könnte eine Schülernummer sein, die deine Schule dir gibt, oder eine Kundennummer in einem Onlineshop. Oft wird diese schlicht id
für Identifikationsnummer genannt. Auch eine Telefonnummer ist eigentlich ein künstlicher Schlüssel, da sie von Menschen zugewiesen wird.
Wenn du mehrere Dinge zusammen brauchst, um etwas eindeutig zu machen, nennt man das einen zusammengesetzten Schlüssel - wie wenn du deinen Vornamen und Nachnamen zusammen benutzt, um dich von anderen zu unterscheiden.
📝 Übungsaufgaben Primärschlüssel.
Überlege für jedes Szenario, ob ein natürlicher, künstlicher oder zusammengesetzter Schlüssel am besten passt und erkläre, warum du dich dafür entschieden hast.
- Deine Playlist auf einem Musik-Streamingdienst
- Die Mitglieder in deinem Sportverein
- Die Bücher in deinem Bücherregal zu Hause
- Deine Freund:innen
- Die Photos in deinem digitalen Fotoalbum
- Die Einträge in deinem persönlichen Tagebuch
- Die Lehrer:innen an deiner Schule
- Die Lage deiner Wohnung
- Eine Stadt
Fremdschlüssel
Ein Fremdschlüssel ist ein Attribut in einer Datenbanktabelle, das auf den Primärschlüssel einer anderen Tabelle verweist. Durch die Verwendung von Fremdschlüsseln können wir Daten in verschiedenen Tabellen miteinander verknüpfen. Andernfalls wäre bei der Tabelle Kuscheltier und Schüler garnicht ersichtlicher welchem Schüler welches Kuscheltier gehört.
Bei der Benennung von Fremdschlüsseln wird häufig eine bestimmte Konvention angewandt. Üblicherweise folgt man dem Schema tabelle_primärschlüssel
, wobei tabelle
für den Namen der referenzierten Tabelle steht und primärschlüssel
für den Namen des Primärschlüssels in dieser Tabelle. Ein anschauliches Beispiel hierfür wäre user_email
in der Tabelle photos
, wenn der Urheber des Photos in der Tabelle users
verwiesen werden soll. Diese Namensgebung macht es einfacher, die Beziehungen zwischen den Tabellen auf einen Blick zu erkennen.
Hier sind die entsprechenden Beispieltabellen:
Tabelle: users
username | name |
---|---|
modelunatica | Luna Eberhardt |
lichtlasse | Lasse Hofmeister |
Tabelle: photos
id | description | user_username |
---|---|---|
1 | Sonnenuntergang in den Bergen | modelunatica |
2 | Berglandschaft im Frühling | modelunatica |
3 | Stadtpanorama am Abgrund | lichtlasse |
Wo der Fremdschlüssel eingefügt wird, hängt von der Art der Beziehung zwischen den Entitäten ab:
1:n-Beziehung
In einer 1:n-Beziehung wird der Fremdschlüssel auf der n-Seite (der "Viele"-Seite) platziert. Anders würde es nicht gehen, da ein Attribut nur ein Wert haben darf und auf der “Eine”-Seite sonst viele Werte stehen müssten.
Beispiel: Eine Schule hat mehrere Räume, aber jeder Raum gehört nur zu einer Schule.
Tabelle: school
id | name |
---|---|
1 | Goethe-Gymnasium |
2 | Schiller-Realschule |
Tabelle: room
id | type | school_id |
---|---|---|
A101 | normal | 1 |
B201 | normal | 1 |
C301 | Chemie | 2 |
Hier ist school_id
in der room
Tabelle der Fremdschlüssel.
1:1-Beziehung
Bei einer 1:1-Beziehung kann der Fremdschlüssel in einer der beiden Tabellen stehen, da es keine Rolle spielt, welche Tabelle auf die andere verweist.
Beispiel: Jeder Schüler hat genau ein Lieblingskuscheltier, und jedes Lieblingskuscheltier gehört genau einem Schüler.
Tabelle: student
id | name | favorite_plush_id |
---|---|---|
1 | Luna Eberhardt | 501 |
2 | Lisa Müller | 502 |
Tabelle: favorite_plush
id | name | type |
---|---|---|
501 | Fluffy | Hase |
502 | Leo | Löwe |
Hier könnte der Fremdschlüssel entweder in der student
Tabelle (wie gezeigt) oder in der favorite_plush
Tabelle platziert werden.
n:m-Beziehung
In einer n:m-Beziehung ist die Situation etwas komplexer: Hier tritt das Problem aus der 1:n-Beziehung auf beiden Seiten auf. Daher benötigt man eine zusätzliche Hilfstabelle, die Fremdschlüssel zu beiden beteiligten Tabellen enthält.
Beispiel: Schüler können mehreren Vereinen angehören, und jeder Verein kann mehrere Schüler als Mitglieder haben.
Tabelle: student
id | name |
---|---|
1 | Luna Eberhardt |
2 | Lasse Hofmeister |
Tabelle: club
id | name |
---|---|
101 | Zeichen AG Staubtanz |
102 | Kletterverein Fallstrick |
Tabelle: student_club (Hilfstabelle)
student_id | club_id |
---|---|
1 | 101 |
1 | 102 |
2 | 101 |
In diesem Fall enthält die Hilfstabelle student_club
Fremdschlüssel zu beiden Haupttabellen und ermöglicht es, die vielfältigen Verbindungen zwischen Schülern und Vereinen abzubilden.