====== 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 );