LU08A1: Fremdschlüssel per ALTER TABLE
Ziel der Übung: Sie greifen Ihren Case aus LU05 wieder auf (Tierheim, Postzustellung, Online-Kleidershop, Eishockeyverein, ÖV oder Schweizer Regionen). Damals haben Sie die Tabellen ohne Fremdschlüssel erstellt. Jetzt verbinden Sie zwei Tabellen mit einem Fremdschlüssel und testen, was MySQL danach erlaubt und was nicht.
- Arbeitsform: 2er-Gruppen
- Zeit: 25 Minuten
- Hilfsmittel: Kursunterlagen LU08
- Ergebnis: Ihre Beobachtungen auf dem ausgedruckten Arbeitsblatt
1) Ausgangslage
- Öffnen Sie Ihre LU05-Datenbank in WebStorm.
- Prüfen Sie, ob die Primärschlüssel vorhanden sind (wie in LU05, Lösungen in LU06).
- Falls Sie neu starten wollen: Erstellen Sie die Tabellen nochmals wie in LU05 (Lösungen in LU06) und füllen Sie ein paar Beispieldaten ein (siehe LU07).
- Die Chen-Diagramme der einzelnen Cases finden Sie hier: Übersicht aller Cases mit Chen-Diagramm (PDF)
2) Fremdschlüssel setzen und Wirkung testen
Laden Sie das Arbeitsblatt zu Ihrem Case herunter und gehen Sie Schritt für Schritt vor. Pro Case setzen Sie einen Fremdschlüssel:
| Case | Fremdschlüssel (Kindtabelle.Spalte → Elterntabelle) | Arbeitsblatt |
|---|---|---|
| Eishockeyverein | spieler_in.block_id → block | Arbeitsblatt Eishockeyverein (PDF) |
| Postzustellung | briefkasten.gebiet_id → postgebiet | Arbeitsblatt Postzustellung (PDF) |
| Öffentlicher Verkehr | fahrt.linien_id → linie | Arbeitsblatt Öffentlicher Verkehr (PDF) |
| Online-Kleidershop | kleidungsstueck.kategorie_id → kategorie | Arbeitsblatt Online-Kleidershop (PDF) |
| Schweizer Regionen | gemeinde.anlage_id → kva | Arbeitsblatt Schweizer Regionen (PDF) |
| Tierheim | tier.art_id → tierart | Arbeitsblatt Tierheim (PDF) |
Auf dem Arbeitsblatt testen Sie danach:
- Werte in die Fremdschlüssel-Spalte eintragen: einen gültigen und einen, den es in der Elterntabelle nicht gibt
- Einträge aus der Elterntabelle löschen: einen, auf den verwiesen wird
- Primärschlüssel in der Elterntabelle ändern: ebenfalls mit und ohne Verweis
Daten einfügen, ändern und löschen können Sie mit SQL oder über die WebStorm-Oberfläche.
SQL-Muster
Die Spalte für den Fremdschlüssel gibt es in Ihrer Kindtabelle schon seit LU05. Sie müssen sie nicht neu anlegen, sondern nur zum Fremdschlüssel machen:
ALTER TABLE kind_tabelle ADD FOREIGN KEY (fremdschluessel_spalte) REFERENCES eltern_tabelle(primaerschluessel_spalte);
Hinweise:
- Die Elterntabelle (die Tabelle, auf die verwiesen wird) muss schon existieren.
- Der Datentyp der Fremdschlüssel-Spalte muss zum Primärschlüssel der Elterntabelle passen (z.B. beide
INT). - Ohne weitere Angabe gilt RESTRICT: Eine Elternzeile lässt sich nicht löschen oder ändern, solange Kindzeilen auf sie zeigen.
- Meldet MySQL beim Setzen den Fehler 1452, steht in der Kindtabelle ein Wert, den es in der Elterntabelle nicht gibt. Das Arbeitsblatt zeigt, wie Sie ihn finden.
