====== Lösung: Öffentlicher Verkehr ======
{{:de:modul:m290_guko:learningunits:lu06:loesungen:oev_crowsfoot.drawio.png?direct&1200|Crow's-Foot-Diagramm Öffentlicher Verkehr}}
//Klicken Sie aufs Bild, um es vergrössert anzuzeigen.//
===== Fremdschlüssel =====
* **linien_id** steht in **fahrt**. Eine Linie hat viele Fahrten, eine Fahrt gehört zu genau einer Linie (1:n).
* Zwischen **linie** und **haltestelle** steht **kein Fremdschlüssel**. Eine Linie hat viele Haltestellen, und eine Haltestelle wird von vielen Linien bedient (n:m) (z.B. Central in Zürich). Wir lösen das später im Modul mit einer Zwischentabelle auf.
===== Datentypen =====
^ Spalte ^ Typ ^ Begründung ^
| fahrt_id, linien_id, haltestelle_id | INT | Ganzzahlige IDs |
| datum | DATE | Nur das Datum ist relevant |
| abfahrtszeit | TIME | Nur die Uhrzeit ist relevant |
| preis | DECIMAL(6,2) | Geldbetrag, exakt auf zwei Nachkommastellen – kein FLOAT wegen Rundungsfehlern |
| name, betreiber, ort | VARCHAR | Textlänge variabel |
===== SQL: Tabellen erstellen =====
Fremdschlüssel-Spalte ist angelegt, aber noch **ohne FOREIGN-KEY-Constraint** – den setzen wir später im Modul. Bie linie und haltestelle gibt es noch keine Fremdschlüssel-Spalte, weil die n:m-Beziehung erst mit einer Zwischentabelle abgebildet werden kann.
CREATE TABLE linie (
linien_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
betreiber VARCHAR(20)
);
CREATE TABLE haltestelle (
haltestelle_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
ort VARCHAR(20)
);
CREATE TABLE fahrt (
fahrt_id INT AUTO_INCREMENT PRIMARY KEY,
datum DATE,
abfahrtszeit TIME,
preis DECIMAL(6,2),
linien_id INT
);