MySQL-Datenbankschema für Zugfahrpläne


7

Ich bin daran interessiert, wie ein MySQL-Datenbankschema für einen Zugfahrplan aussehen würde.

Im Allgemeinen wird dies als Endergebnis im Tabellenformat dargestellt.

Train No.    11111  22222  11111
Train Day    Mo-Fr  Sat    Sun
Station A  d 06.00  07.00  07.00
Station B  d 06.10         07.10
Station C  d 06.20  07.15   
Station D  a 06.30         07.40
Station D  d 06.35  07.25
Station E  d 06.45  07.45

Jeder Zug hat also eine Zugnummer, die jedoch nicht eindeutig ist, da die Nummer von Montag bis Freitag bis Samstag und Sonntag dupliziert wird. Dann hält ein Zug an einer Reihe von Bahnhöfen, aber nicht an allen, und manchmal benötigt der Bahnhof eine Ankunfts- (a) und Abfahrtszeit (d) oder die eine oder andere.

Stationen können nach ihrer Entfernung bestellt werden.

Bisher denke ich, ich brauche Tabellen für:

  • Stationen (ID, Name, Entfernung, Linie)
  • Zug (Ausweis, Zugnummer, Tagesbetrieb, Details)
  • Zugfahrt (Train.ID, Station.ID, arr / dep, Zeit, Notizen)

Ist das normalisiert genug?

  • Sollte der Zug 11111 für Mo-Fr nur ein Eintrag mit vielen Kombinationen von Tagesbetrieb sein, dh 7 Spalten (M, T, W, Th, F, S, Su)?
  • Sollte es nicht auch einen einmaligen Zug geben, der nur an einem Datum fährt und sich nicht wöchentlich wiederholt?

Achten Sie beim Modellieren der Daten nicht auf das Eingabeformat. Stellen Sie die Fragen, die Sie an die Daten stellen möchten. Ohne zu wissen, welche Art von Fragen Sie haben, können wir nicht herausfinden, welche Abfragen für die Datenstrukturen erforderlich sind. Ob es sich also um ein gutes Design handelt oder nicht.
Joe

Oh ... und ich würde wahrscheinlich sehen, wie das ursprüngliche Palm-Kalenderprogramm einzelne oder sich wiederholende Ereignisse handhabt. es schien in der Lage zu sein, fast alles zu handhaben, was man in Bezug auf Veranstaltungspläne darauf werfen konnte; viel mehr Glück, das ich mit iCalendar / vCalendar / hCalendar hatte.
Joe

Das angegebene Beispiel ist die Ausgabe. Die Art von Abfragen, die ich ausführen würde, wäre die Ausgabe: Zugzeiten an Station X, Fahrplan für Zug Y oder alle Zugfahrpläne (Beispiel angegeben). Dh ein Filtereffekt.
Vicsig

Antworten:


7

Ich würde dringend in Betracht ziehen, alle Tage, an denen ein bestimmter Zeitplan tatsächlich ausgeführt wird, explizit zu speichern. Dies würde eine Struktur ergeben, die ungefähr so ​​aussieht:

Geben Sie hier die Bildbeschreibung ein

Auf diese Weise können Sie Fragen wie "Welche Züge fahren am 1. Oktober zum Bahnhof X?" Viel einfacher beantworten. Es ermöglicht auch die Identifizierung "vorübergehender Lücken", wenn Züge nicht fahren (z. B. am Weihnachtstag). Ein einmaliger Zug ist jetzt einfach einer mit nur einem Eintrag in SCHEDULE_DAYS.

Da der Zeitplan an Wochenenden und Wochentagen unterschiedlich sein kann, ist es meiner Meinung nach besser, für jeden Tag separate Zeilen zu haben. Auf diese Weise können Sie für jeden Wochentag unterschiedliche Zeitpläne verknüpfen, falls Sie dies jemals tun müssen.


Was ist, wenn Sie einen Aspekt der Richtung einführen möchten? In der Fahrplan-Tabelle steht, von welchem ​​Bahnhof der Zug kommt
theTypan

1
Sie können die Richtung aus den Ankunfts- / Abfahrtszeiten der Stationen in einem Zeitplan ableiten
Chris Saxon

1

Sie können die einmaligen Läufe bearbeiten, indem Sie Datumsfelder für den ersten Lauf und die Beendigung (erstes Datum, an dem sie nicht mehr ausgeführt werden) haben. Auf diese Weise können Sie auch Zeitplanänderungen vornehmen. Das erste Ausführungsdatum wird Teil des Primärschlüssels. Möglicherweise möchten Sie in dieser Tabelle einen Ersatzprimärschlüssel für die Beziehungstabelle.

Ich würde in Betracht ziehen, die Wochentage in sieben separate Indikatorfelder aufzuteilen. Dies gibt Ihnen die Flexibilität, Zeitpläne zu verwalten, die nur an bestimmten Wochentagen ausgeführt werden. Die Beziehung zwischen Bahnhof und Bahnhof könnte auf (Zug, Bahnhöfe, Typ (Ankunft / Abfahrt) Tageszeit) reduziert werden. Noten können je nach Dichte in eine separate Beziehung geraten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.