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
- Rejestracja:ponad 11 lat
- Ostatnio:około 7 lat
- Postów:72

- Rejestracja:około 17 lat
- Ostatnio:około 17 godzin
- Lokalizacja:Wrocław
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.
- Rejestracja:ponad 11 lat
- Ostatnio:około 7 lat
- Postów:72
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:
- 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
- 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ć?
- Rejestracja:ponad 11 lat
- Ostatnio:około 7 lat
- Postów:72
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?
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ę.

- Rejestracja:około 17 lat
- Ostatnio:około 17 godzin
- Lokalizacja:Wrocław
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.
@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.

- Rejestracja:około 17 lat
- Ostatnio:około 17 godzin
- Lokalizacja:Wrocław
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...
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.

- Rejestracja:około 17 lat
- Ostatnio:około 17 godzin
- Lokalizacja:Wrocław
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.
- Rejestracja:ponad 11 lat
- Ostatnio:około 7 lat
- Postów:72
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
- Rejestracja:ponad 11 lat
- Ostatnio:około 7 lat
- Postów:72
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
- 182a06c361.png (56 KB) - ściągnięć: 304

- Rejestracja:około 17 lat
- Ostatnio:około 17 godzin
- Lokalizacja:Wrocław
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
?
- Rejestracja:ponad 11 lat
- Ostatnio:około 7 lat
- Postów:72
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"