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?
mysql
database-design
schema
Vicsig
quelle
quelle
Antworten:
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:
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.
quelle
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.
quelle