Lösung: Schweizer Regionen
Fremdschlüssel
- kantons_kennzeichen steht in gemeinde. Ein Kanton hat viele Gemeinden, eine Gemeinde gehört zu genau einem Kanton (1:n).
- anlage_id steht ebenfalls in gemeinde. Eine Kehrichtverbrennungsanlage wird von mehreren Gemeinden genutzt, eine Gemeinde nutzt genau eine Anlage (1:n) – zwei Fremdschlüssel in derselben Tabelle.
Mehrere Fremdschlüssel in derselben Tabelle sind kein Fehler: Sie treten immer dann auf, wenn eine Entität an zwei unabhängigen 1:n-Beziehungen die „viele“-Seite ist.
Besonderheit: Der Primärschlüssel von kanton ist kantons_kennzeichen CHAR(2) – kein INT wie in allen anderen Tabellen. Das ist ein sogenannter natürlicher Schlüssel: „ZH“, „BE“, „GR“ sind von Natur aus eindeutig und ändern sich nie, eine künstliche Zusatz-ID wäre hier unnötig. Der Fremdschlüssel in gemeinde übernimmt exakt denselben Typ (CHAR(2)) – Primär- und Fremdschlüssel müssen immer vom gleichen Datentyp sein.
Datentypen
| Spalte | Typ | Begründung |
|---|---|---|
| kantons_kennzeichen | CHAR(2) | Natürlicher Schlüssel, immer genau 2 Zeichen („ZH“, „BE“ …) |
| gemeinde_id, anlage_id | INT | Ganzzahlige, künstliche IDs |
| einwohnerzahl | INT | Ganze Zahl |
| flaeche | DECIMAL(6,2) | Fläche mit Nachkommastellen, exakt – der grösste Kanton (GR, ca. 7105 km²) passt in 4 Vorkommastellen |
| plz | CHAR(4) | Einzelne, repräsentative Postleitzahl |
| name | VARCHAR | Textlänge variabel |
SQL: Tabellen erstellen
Fremdschlüssel-Spalten sind angelegt, aber noch ohne FOREIGN-KEY-Constraint – den setzen wir später im Modul.
CREATE TABLE kanton ( kantons_kennzeichen CHAR(2) PRIMARY KEY, name VARCHAR(20) NOT NULL, einwohnerzahl INT, flaeche DECIMAL(6,2) ); CREATE TABLE kva ( anlage_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20) NOT NULL, ort VARCHAR(20) ); CREATE TABLE gemeinde ( gemeinde_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20) NOT NULL, einwohnerzahl INT, plz CHAR(4), kantons_kennzeichen CHAR(2), anlage_id INT );
