Я разрабатываю расписание автобусов с использованием SQL.Каждый автобусный маршрут имеет несколько остановок, нужна ли мне отдельная таблица для каждого маршрута?
Вопрос
Я пытаюсь создать максимально эффективную базу данных, насколько это возможно.Все мои автобусные маршруты имеют около 10 остановок.Автобус отправляется с первого номера, пока не дойдет до 10-й остановки, затем возвращается снова.Этот цикл происходит 3 раза в день.
Я действительно зациклен на том, как я могу эффективно генерировать время для автобусов и где я должен хранить остановки.Если я помещу все остановки в одно поле, а время - в другое, база данных будет не очень динамичной.
Если я сохраню все остановки одну за другой в столбце, а затем время в другом столбце, то дальше будет много повторений, поскольку одна остановка выполняется несколько раз.
Возможно, я чего-то не понимаю, я только начал изучать SQL, и это поставленная перед нами задача.
Заранее благодарю.
Решение
Вам понадобится одна таблица, содержащая ваши Timetable
:
- Идентификатор маршрута
- Идентификатор остановки
- Время
- Возможно, другие поля по мере необходимости (направление, последовательность #, блок # и т.д.)
Я бы рекомендовал создавать отдельные таблицы Bus Stop
(для хранения названий остановок, широты / длины и т.д.) И Route
(чтобы сохранить название маршрута, первую остановку, последнюю остановку, направление и т.д.).
Вероятно, вы уже знаете об этом, но планирование движения автобусов может очень быстро усложниться.Например:
Возможно, вам потребуется обозначить определенные остановки как "Временные точки", которые отображаются в распечатанных расписаниях
Каждый маршрут может иметь несколько вариаций.Например, некоторые версии могут начинаться или заканчиваться на другой автобусной остановке
Расписание, вероятно, будет отличаться в субботу и воскресенье, и большинство агентств меняют свои расписания ежеквартально
Возможно, вам потребуется рассмотреть некоторые из этих случаев и встроить их в свою схему.
Помогает ли это?
Другие советы
Вот лишь один (из многих) способов сделать это:
Это звучит так, как будто вы, вероятно, хотите иметь routes
таблица, которая описывает каждый маршрут и имеет время начала.
Затем, a stops
таблица с описанием и временем ожидания автобуса на каждой остановке.
A stopDistanceMapping
в таблице будет описано расстояние между двумя остановками и время в пути между ними.
Наконец, ваш routeMap
таблица свяжет отдельные routes
с перечнем stops
.Затем вы можете заполнить свой routes
таблица расстояния и времени при использовании времени ожидания от каждой отдельной остановки, а также времени / расстояний от stopDistanceMapping
.
Удачи вам!
На (очень грубом) 1-м проходе я бы сохранил время следования автобуса в таблице, подобной этой:
RouteID StartingLocationID EndingLocationID TravelTime
Также я бы вел таблицу остановок, таких как:
StopID Address City etc... (whatever other information you need about each location)
Для самих маршрутов я бы сохранил:
RouteID StartingLocationID RouteStartTime
Очевидно, что вы должны адаптировать это к своим собственным потребностям, но это должно дать вам с чего начать.