Pomoc w stworzeniu bazy danych

0

Hej,
piszę na studia aplikację z rozkładami jazdy, potrzebuję jakoś przechowywać rozkłady jazdy itd. Pomyślałem o bazie danych mySQL tylko kompletnie nie wiem jak powinna wyglądać struktura takiej bazy danych. Na początku myślałem o 3 tabelkach gdzie w jednej miałbym numer linii, numer przystanku w kolejnej miałbym linie tramwajową/autobusową i id przystanków tramwajowych na których kursują a w ostatniej przystanki godziny odjazdów i przyjazdów dla poszczególnych Id tramwajów. Ale gdy o tym myślę mam wrażenie że ta struktura jest zupełnie błędna i że zaplątam się w jej wykorzystaniu i będę miał problem żeby działało to tak jak trzeba.

Czy byłby ktoś w stanie mi podpowiedzieć jak poprawnie powinna wyglądać taka baza danych?

Za każdą radę z góry dziękuję!

0

@cybuch43: Może coś takiego?
Jedna tabela zawiera linie autobusowe/tramwajowe, druga zawiera przystanki na których autobus/tramwaj danej linii się zatrzymuje, a trzecia, posiadająca jako klucz główny połączoną linię i przystanek, będzie zawierać godziny przyjazdów dla konkretnych dni tygodnia?

Nie mam doświadczenia w bazach danych, ale może to się sprawdzi.

0

A nie lepiej trzyma tego w jakimś Redisie? Klucz to numer linii, a wartość to lista z godzinami. Chyba, że to musi być relacyjna baza.

0

To zależy od tego jak sobie postawisz problem. Takie uwagi:

  • jedna linia może przebiegać na wielu trasach w zależności od pory dnia albo od kierunku podróży

  • na linii może zostać wprowadzona komunikacja zastępcza w całości albo na jakimś odcinku

  • przydatne są informacje na temat tego czy pojazd jest niskopodłogowy (dla niepełnosprawnych), a na jednej linii każdy przejazd może być obsługiwany innym pojazdem

  • kilka różnych przystanków może się nazywać tak samo (np w środku ronda albo na wjeździe/zjeździe z niego) - co ma wpływ na czasy przesiadek

  • na rozkładzie jazdy można pokazywać nie tylko planowe odjazdy ale też przewidywane (bo np wszystkie autobusy mają GPS)

W każdym razie jak planujesz bazę danych to musisz wiedzieć w jaki sposób dane będą z tej bazy wyciągane i jakiego rodzaju dziwactwa wspierasz. Są mniej lub bardziej otwarte API z rozkładami jazdy w większych miastach, możesz spróbować podpatrzyć jak to u nich działa.

0
Eldorad O. napisał(a):

[...] trzecia, posiadająca jako klucz główny połączoną linię i przystanek, będzie zawierać godziny przyjazdów dla konkretnych dni tygodnia [...]

Prawie dobrze @Eldorad O. napisał, ale w tej trzeciej to nie może być klucz główny, bo się będzie powtarzać. Trzecia (z braku laku: Zatrzymania_się :)) mogłaby raczej wyglądać tak:

  • ID_Linii (klucz obcy z tabeli Linie)
  • ID_Przystanku (klucz obcy z tabeli Przystanki)
  • Dzień_i_godzina_w_tygodniu [lub coś podobnego, niekoniecznie w jednym polu]
  • ID _Zatrzymania_się (klucz główny)
2

@cybuch43:

piszę na studia aplikację z rozkładami jazdy, potrzebuję jakoś przechowywać rozkłady jazdy itd. Pomyślałem o bazie danych mySQL tylko kompletnie nie wiem jak powinna wyglądać struktura takiej bazy danych.

W ogóle porzuć taki tok myślenia - czyli nie zaczynaj od warstwy persystencji. Tak się pisało 20 lat temu..

Ogólnie to zacząłbym od problemu definiując sobie główne "obiekty":

Pierwszy i chyba główny, to: linia i ma ona np. takie właściwości:

  • numer
  • kierunek, raz pierwszy przystanek jest tym pierwszym a raz końcowym
  • lista przystanków przez które przebiega wraz z godziną i minutą (tutaj może być tak że linia może przebiegać w zależności np. od dnia przez różne przystanki)

Kolejnym "obiektem" jest przystanek:

  • numer
  • pozycja w przestrzeni
  • lista linii jakie przez niego przejeżdżają
  • kierunek
1

@.andy:
To jest prawidłowy sposób rozwiązania problemu czyli stworzenie abstrakcyjnego modelu, a sam zapis do bazy jest problemem wtórnym.
Do tego co napisałeś dodał bym jeszcze obiekt nadrzędny jakim jest "rozkład jazdy" który ma obiekty podrzędne "linie" .
Dzięki temu można utworzyć kontener zawierający wiele różnych rozkładów jazdy np. z datami obowiązywania.
Przystanki,jako obiekty niezależne od "rozkładu jazdy", wyrzucił bym do odrębnego kontenera i w zależności od potrzeb wiązał bym z konkretną "linią".

lista linii jakie przez niego przejeżdżają

to jest zbędne, taka informacja zawarta jest w obiektach klasy "linia"

1

Sugerowałbym:

  1. Zastanowić się co ma robić aplikacja

Do wyświetlania rozkładów wg przystanków nie potrzebujesz bazy, wystarczy np. statyczny content pobierany z serwera.
Co innego jeśli chodzi o wyszukiwanie połączeń z punktu A (+-10 minut od "teraz") do punktu B. Kto wie, może zamiast relacyjnej, to skończysz z bazą grafową?

  1. Zrozumieć domenę (transport publiczny?)

Możesz wyjść od jakichś istniejących modeli (np. http://www.transmodel-cen.eu/)

0

Dzięki wszystkim za odpowiedzi! Każdy post dał mi do myślenia i spowodował że zmieniłem koncept. Gdy to przemyślałem uznałem że stworzenie bazy a później zapełnienie jej dla projektu na studia jest zbyt czasochłonne i jest niczym strzelanie z armaty do wróbla. Udało mi się ogarnąć rozkład jazdy w XML'u dla jednego miasta więc całość będzie zaciągana z plików. Mało profesjonalnie ale wystarczy. Jeszcze raz wielkie dzięki za pomoc!

1 użytkowników online, w tym zalogowanych: 0, gości: 1