• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zaprojektowanie bazy w mySQL dla nieznanej liczby obiektów

VPS Starter Arubacloud
0 głosów
142 wizyt
pytanie zadane 19 kwietnia 2017 w SQL, bazy danych przez TeslaX93 Gaduła (3,600 p.)

Więc chciałem zaprojektować sobie bazę danych do aplikacji, która będzie wyszukiwać połączenia autobusowe.
Wyglądać to powinno mniej więcej tak:

nr autobusu nr linii od przez do typ
5321 A3 Gdańsk Tczew, Płock Warszawa zwykły
2421 D7 Bielsko-Biała Katowice, Opole Poznań ekspres
4622 F9 Wrocław Opole, Katowice, Kraków, Rzeszów Lwów zwykły
8733 K1 Białystok Warszawa, Dąbrowa Górnicza Katowice ekspres

I pojawia się tutaj pytanie - w jaki sposób właściwie przechować przystanki pośrednie, których ilość jest z góry nieznana?
Zakładam, że rozwiązania typu "osobna tabela dla każdego kursu" jest kiepskim rozwiązaniem, podobnie jak robienie 20 kolumn typu przez1,przez2 też jest bez sensu. W jaki sposób projektuje się tego typu rozwiązania, aby nie zasyfić sobie bazy danych i nie robić gigantycznej redundancji?

2 odpowiedzi

+1 głos
odpowiedź 19 kwietnia 2017 przez Ehlert Ekspert (214,060 p.)
wybrane 11 stycznia 2019 przez TeslaX93
 
Najlepsza

Zapoznaj się z terminem normalizacja i rozbij tą jedną tabelę na:

  1. Nr autobusów (id, numer autobusu)
  2. Nr linii (id, linia)
  3. Miasta/miejscowości (id, nazwa miejscowości)
  4. Typy kursów (id, nazwa typu)
  5. Kursy (id kursu, id punktu start, id punktu końcowego, id typu)
  6. Przystanki pośrednie (id, kolejność przystanku, id_przystanku)

Jest z tym dużo roboty, fakt. Ktoś mi zarzuci: po co takie tabele jak linia z dwoma kolumnami. A no po to, byś sobie nie popodcinał żył jak dojdzie Ci 40 nowych linii autobusowych i 60 autobusów wink

Powodzenia, całkiem ciekawy życiowy projekt. 

+1 głos
odpowiedź 19 kwietnia 2017 przez CzikaCarry Szeryf (75,340 p.)
Robisz 3 tabele: tabela z przystankami, która ma kolumny "id" i "przystanek", tabelę z kursami autobusu która zawiera "id" i nazwę kursu, potem tworzysz tabelę łączącą zawierającą "id_kursu" i "id_przystanku", następnie łączysz te tabele relacją i tyle :)

Ewentualnie możesz też zrobić kolumnę z przystankami w tej twojej tabeli, i tam, oddzielając średnikiem dodawać poszczególne przystanki, a następnie splitować dane z tej kolumny, aczkolwiek zalecam pierwsze rozwiązanie.

Podobne pytania

0 głosów
1 odpowiedź 257 wizyt
pytanie zadane 18 listopada 2017 w SQL, bazy danych przez Macek Kolo Mądrala (5,480 p.)
0 głosów
1 odpowiedź 541 wizyt
pytanie zadane 17 grudnia 2017 w SQL, bazy danych przez seam3 Początkujący (450 p.)
0 głosów
1 odpowiedź 1,864 wizyt

93,005 zapytań

141,971 odpowiedzi

321,251 komentarzy

62,343 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...