Marcin
Kapusta
iOS
Developer/Software
Developer/Music
Producer
Temat: Pomysły na strukturę bazy danych do przechowywania...
Witajcie.Projektuje bazę danych do szybkiego wyszukiwania miejscowości pomiędzy dwoma podanymi w zapytaniu.
Generalnie chodzi o to, że danymi wejściowymi do zapytania jest miejscowość A i miejscowość B i na tej podstawie trzeba wyszukać wszystkie miejscowości w odpowiedniej kolejności jakie mogą wystąpić na trasie z miejscowości A do B. Dane na początku będą tylko dla kilku głównych miast, ale w miarę upływu czasu będą coraz bardziej szczegółowe. Do tej struktury powinno się dać w łatwy sposób dodawać nowe miejscowości. Powinno być też połączenie między miejscowościami. Każde takie połączenie powinno dać się podzielić na dwie części bo np. gdy mamy w bazie:
Połączenie | Z | Do
1 |Poznań |Warszawa
i gdy dodamy np. miejscowość Łódź do połączenia 1 to powinno to połączenie zostać podzielone na dwa i teraz połączenia powinny wyglądać jakoś tak:
Połączenie | Z | Do
1 |Poznań |Warszawa
1a |Poznań |Łódź
1b |Łódź |Warszawa
Każde połączenie powinno dać się podzielić gdyż w miarę jak będziemy dodawać miejscowości na danych połączeniach będzie je trzeba dzielić.
Następnie gdy zadamy pytanie do bazy o miejscowości z miasta Poznań do Warszawa baza powinna zwrócić najlepiej w jednym zapytaniu sekwencję rekordów z tabeli miejscowości:
Poznań
Łódź
Warszawa
Jeśli później dodamy do połączenia 1a np. miejscowość Konin
to połączenia powinny wyglądać tak:
Połączenie | Z | Do
1 |Poznań |Warszawa
1a |Poznań |Łódź
1aa |Poznań |Konin
1ab |Konin |Łódź
1b |Łódź |Warszawa
Widzę, że robi się z tego takie drzewko:
1 [Poznań-Warszawa]
|
----------------------------
| |
1a [Poznań-Łódź] 1b [Łódź-Warszawa]
|
------------------------
| |
1aa [Poznań-Konin] 1ab [Konin-Łódź]
I trzeba przy wyszukiwaniu odnaleźć liście tego drzewa bo one zawierają informacje na temat najbardziej szczegółowych miejscowości na trasie.
Teraz po wykonaniu zapytania Poznań - Warszawa baza powinna zwrócić sekwencję rekordów:
Poznań
Konin
Łódź
Warszawa
Idealnie by było, jeśli wykorzystując te dane dało by się wyszukać miejscowości na trasie odwrotnej - z Warszawy do Poznania czyli baza wówczas by zwróciła sekwencję rekordów:
Warszawa
Łódź
Konin
Poznań
Powinna być też możliwość odpytania o miejscowości podając jako dane wejściowe np. Poznań - Łódź lub Konin - Warszawa.
Poznań - Łódź powinno zwrócić
Poznań, Konin, Łódź
a Konin - Warszawa powinno zwrócić
Konin, Łódź, Warszawa
Czy macie może jakieś pomysły jak podejść do tego, żeby to było efektywne i działało szybko i jak powinna wyglądać struktura bazy danych do przechowywania tego.
Mam do dyspozycji bazę danych MySQL.
Z góry dziękuje za jakiekolwiek pomysły.Marcin Kapusta edytował(a) ten post dnia 29.03.12 o godzinie 09:47