schemat bazy danych rozkładu MPK

0

Witam, mam za zadanie zrobić bazę danych rozkładu jazdy autobusów MPK. Zrobiłem schemat i proszę o sprawdzenie, chodzi głównie o tabele i związki pomiędzy nimi. Jedyny warunek jaki jest to to, że musi być minimum 5 tabel. Jeśli macie jakieś propozycje co do zmiany(dodania/usuniecia) tabel lub właściwości to z góry dzięki. Dodatkowo chciałbym zapytać jak uwzględnić w danym kursie to czy kurs jest w dni robocze, soboty, niedziele i święta oraz bardziej szczegółowe dodatkowe informacje jak np. kursuje tylko w dni nauki szkolnej lub że dany kurs kończy sie lub zaczyna na innym przystanku niż powinien.
Link do schematu
http://i.imgur.com/Lgz9pqB.png?1

0

Tak na zdrowy rozsądek:
Trasa składa się z wielu Przystanków, ale Przystanek może też należeć do wielu Tras. Jedna Linia może mieć wiele Autobusów, ale i jeden Autobus może chyba jeździć na wielu Liniach. Linia łączy się z Trasą, no i zawiera w sobie wiele Kursów.

0

http://oi61.tinypic.com/2qdv6s8.jpg
Nie wiem czy w ogóle mam dobry pomysł jak ten problem rozwiązać. Teraz zmieniłem nazwy tylko nie wiem jak w końcu nazwać pustą tabelę. Na przykład:

  1. jest jedna linia nr 10 i ona zawiera np 3 kursy o różnych godzinach np 11:00,12:00,13:00 i 3 trasy w odwrotną stronę o 10:00,15:00,16:00
  2. kurs zawiera 3 tabele np:
    • przystanek A, Autobus nr 1, godzina 11:00
    • przystanek B, Autobus nr 1, godzina 11:04
    • przystanek C, Autobus nr 1, godzina 11:09
      jeśli nie jest to za dobrze to w jaki sposób to zmodyfikować?
0

Ok, Wymyśliłem takie coś:
http://i.imgur.com/aSED2r3.jpg
Mam pytanie co do połączenia tabeli kurs z przystankiem czy można jakoś inaczej przechowywać informacje na temat tego o której w danym kursie jest autobus na danym przystanku?

0

Blisko, ale nie tak.
Trasa - linia - przystanki:

  • Trasa przynależy do linii 1-1, linia może mieć jedną trasę (chyba, że rozpatrujemy Wrocław, ale to patologia)
  • Na trasie są przystanki 1-*, przy czym trasa to ciąg Y-B-C-X-Cp-Bp-Y - zatem cała pętla, a nie półpętla. Pamiętaj, że przystanki w różnych kierunkach powinny być rozróżnialne (znowu patologia z Breslau)

Linia - brygada - wóz:

  • Na jednej linii jeździ N brygad 1-* - brygada jest tak naprawdę jednostką organizacyjną pozwalającą na "podpięcie" kierowców do konkretnych tras i wozów.
  • Do jednej brygady należy jeden wóz 1-1

Brygada - Kurs:

  • brygada wykonuje N kursów należących do jednej linii (zakładamy, że na pętlach nie zmienia się oznaczenia wozu).

Zatem połączenie KURS<>TRASA nie jest dobre ponieważ trasa należy do linii i zmiana w trasie nie powinna wpływać bezpośrednio na kurs KURS>BRYGADA>LINIA>TRASA. Wpływa na linię.
Kurs nie ma przystanków jako takich - znowuż zależność pośrednia poprzez brygadę i linię.

0
Koziołek napisał(a):
  • Trasa przynależy do linii 1-1, linia może mieć jedną trasę (chyba, że rozpatrujemy Wrocław, ale to patologia)

@Koziołek, co nazywasz trasą? Bo trzeba uwzględnić to, że przystanki na trasach "tam" i "z powrotem" mogą się różnić, a także to, że trasy "z powrotem" może w ogóle nie być.

Kurs nie ma przystanków jako takich - znowuż zależność pośrednia poprzez brygadę i linię.

A gdzie przechowujemy dane o godzinach odjazdu?
Moim zdaniem powiązania: Linia 1 - n Kurs 1 - n PrzystanekKursu n - 1 Przystanek. Trasa jest właściwie czymś redundantnym, tzn. możliwym do wywnioskowania z Kursu.

0

@somekind, kawałek dalej napisałem przy czym trasa to ciąg Y-B-C-X-Cp-Bp-Y Trasa w moim rozumieniu to cały przejazd od pętli Y do X i z powrotem. Odpada wtedy problem przejazdu trasą alternatywną (drogi jednokierunkowe).

somkind napisał(a)

A gdzie przechowujemy dane o godzinach odjazdu?

W trasie tabela zawierająca informacje o przystankach dla danej trasy :

id_trasy|id_przystanku|czas|id_nastepnego
---------+----------------+------+----------------
1          |1                  |1     |2
1          |2                  |1     |3
1          |3                  |1     |4
1          |4                  |2     |5

Przy czym kolumna czas może zawierać zarówno czas potrzebny na pokonanie odcinka od jednego przystanku do drugiego jak i czas całkowity na trasie. Takie rozwiązanie ma ten plus, że pozwala na wyszukiwanie par przystanków w ramach różnych tras i weryfikację czy dla danej pary czas zawsze jest taki sam w ramach różnych rozkładów.

0
Koziołek napisał(a):

@somekind, kawałek dalej napisałem przy czym trasa to ciąg Y-B-C-X-Cp-Bp-Y Trasa w moim rozumieniu to cały przejazd od pętli Y do X i z powrotem.

Ok, teraz rozumiem, ten szyfr był dla mnie trochę niezrozumiały. :)
Ale jak sam zauważyłeś, to podejście jest oderwane od rzeczywistości. Nie tylko we Wrocławiu pojazdy zjeżdżają do zajezdni. Co z nimi?

Przy czym kolumna czas może zawierać zarówno czas potrzebny na pokonanie odcinka od jednego przystanku do drugiego jak i czas całkowity na trasie. Takie rozwiązanie ma ten plus, że pozwala na wyszukiwanie par przystanków w ramach różnych tras i weryfikację czy dla danej pary czas zawsze jest taki sam w ramach różnych rozkładów.

No dobra, ale to jest informacja o czasie przejazdu między przystankami na trasie, która też jest oderwana od rzeczywistości, bo czas przejazdu o różnych porach jest różny i to rozkłady uwzględniają. No i nadal nie widzę godzin odjazdów...

0

Godzin nie ma, bo to model uproszczony - można to zamknąć w tabeli z opisem kursu. We Wrocławiu jest generalnie patologia, bo pojazd zjeżdżający do zajezdni zatrzymuje się na przystankach poza standardową trasą nigdzie indziej się z tym nie spotkałem. Zazwyczaj pojazd zjazdowy ma tablicę z informacją "Zjazd do zajezdni. Ostatni przystanek na trasie taki to a taki".
Dodatkowo część kursów obejmuje pewne fragmenty trasy, a część je ignoruje.

0
Koziołek napisał(a):

Godzin nie ma, bo to model uproszczony

Temat brzmi "schemat bazy danych rozkładu MPK". Dla mnie rozkład to informacja o godzinach odjazdu z przystanków, a nie o czasie przejazdu między nimi.

We Wrocławiu jest generalnie patologia, bo pojazd zjeżdżający do zajezdni zatrzymuje się na przystankach poza standardową trasą nigdzie indziej się z tym nie spotkałem. Zazwyczaj pojazd zjazdowy ma tablicę z informacją "Zjazd do zajezdni. Ostatni przystanek na trasie taki to a taki".

Z punktu widzenia bazy danych nie ma różnicy. Trasa jest inna, bez względu na to, czy się po prostu "urywa" czy wiedzie do zajezdni przez dodatkowe przystanki.

0

Powiedzmy że Trasa to jest połczenie przystanków ale tylko w jedną stronę np A-B-C-D-E
Jedna linia miała by powiedzmy 2 trasy w jedną i drugą stronę (A-B-C-D-E i E-D-C-B-A) no i może ewentualnie jakieś dodatkowe trasy gdy np. startuje z innego przystanku.
Kurs to juz byłaby ta trasa ale z uwzględnieniem o której jest autobus na każdym z przystanku i trasa zawierała by powiedzmy 15 kursów. No i teraz pytanie czy zrobić to tak jak tu: http://i.imgur.com/aSED2r3.jpg (no ale to sie wydaje troche bez sensu bo będzie można dodać przystanek do kursu który nie leży na tej trasie co kurs)
czy bez połączenia kursu z przystankiem, no ale jak wtedy uwzględnić te godziny

0

No i niestety musze powrócić do tego problemu. Wymyśliłem takie 2 schematy:
1- http://i.imgur.com/5VeGwUo.jpg
2- http://i.imgur.com/qM65vLW.jpg
No i tu mam pytanie. Oba schematy różnia się tylko umieszczeniem czasu postoju autobusu na przystanku. W 1 schemacie jest taki problem że stworzymy trasę z przystankami(np a-B-C-D) to gdy będziemy dodawać punkty do konkretnego kursu to będziemy mogli dodać punkt który nie jest w tej trasie(np E). W drugim schemacie jest podobnie, no i tu moje pytanie. Czy można Jakoś z poziomu SQL Zablokować żeby nie można było dodać przystanku nie należacego do trasy czy trzeba to zrobic juz w samej aplikacji( bo taka mam napisać). Dodam że baza będzie w PL/SQL Oracle. Z góry dzięki za pomoc

0

Myślę, że schemat 2 jest mimo wszystko lepszy, bo nie ma za bardzo sensu rozdzielać czasu postoju od punktu kursu.

cinek181992 napisał(a):

Czy można Jakoś z poziomu SQL Zablokować żeby nie można było dodać przystanku nie należacego do trasy czy trzeba to zrobic juz w samej aplikacji

Mógłbyś takie coś zrobić, gdybyś miał jakieś powiązanie między przystankami a trasą... Ale po co w ogóle jest tabela trasa?

0

a dało by się w miare łatwo zrobić to powiazanie czy lepszym pomysłem jest zrobić to w aplikacji?
Co do trasy to jedna linia np nr 1 zawiera kilka tras np: 2 główne a-B-C-D-E, E-D-C-B-a i na przykład jakas inna gdy startuje z innego przystanku np B-C-D-E bez przystanku "a"

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