Dies ist eine alte Version des Dokuments!
Lösung: Eishockeyverein
Fremdschlüssel
- block_id steht in spieler_in. Ein Block hat viele Spieler:innen, eine Spielerin gehört zu genau einem Block (1:n) – der Fremdschlüssel steht auf der „viele“-Seite.
- team_id steht in block. Ein Team hat viele Blöcke, ein Block gehört zu genau einem Team (1:n).
- trainer_id steht in team (1:1-Beziehung). Ein Team kann bereits existieren, bevor ihm ein Trainer zugeteilt ist – die Trainerfrage klärt sich oft erst später in der Saison. Die Seite, die auch ohne Partner existieren kann, bekommt den Fremdschlüssel.
1:1 in SQL wirklich erzwingen: Der Fremdschlüssel allein reicht nicht aus – ohne zusätzliche Regel könnte derselbe Trainer zwei Teams zugewiesen werden. Dafür bräuchte trainer_id in der Tabelle team zusätzlich den Constraint UNIQUE.
Datentypen
| Spalte | Typ | Begründung |
|---|---|---|
| spieler_id, block_id, team_id, trainer_id | INT | Ganzzahlige, automatisch vergebene IDs |
| rueckennummer | INT | Es wird zwar nicht damit gerechnet, aber Rückennummern sind reine Ziffern ohne führende Nullen – INT ist hier vertretbar |
| position, name (überall) | VARCHAR | Textlänge variabel |
| altersklasse | VARCHAR(5) | Kurze Codes wie „U18“, „U21“ passen knapp – bewusst kurz gehalten |
| bezeichnung | VARCHAR(20) | Kurzer Blockname wie „1. Block“ |
SQL: Tabellen erstellen
Fremdschlüssel-Spalten sind angelegt, aber noch ohne FOREIGN-KEY-Constraint – den setzen wir später im Modul.
CREATE TABLE trainer ( trainer_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL ); CREATE TABLE team ( team_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20) NOT NULL, altersklasse VARCHAR(5), trainer_id INT ); CREATE TABLE block ( block_id INT AUTO_INCREMENT PRIMARY KEY, bezeichnung VARCHAR(20), team_id INT ); CREATE TABLE spieler_in ( spieler_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, rueckennummer INT, POSITION VARCHAR(20), block_id INT );
