Я разрабатываю расписание автобусов с использованием SQL. У каждого автобусного маршрута есть несколько остановок. Нужна ли отдельная таблица для каждого маршрута? - PullRequest
4 голосов
/ 24 марта 2010

Я пытаюсь создать максимально эффективную базу данных. Все мои автобусные маршруты имеют около 10 остановок. Автобус начинается с номера один до 10-й остановки, затем снова возвращается. Этот цикл происходит 3 раза в день.

Я действительно застрял в том, как я могу эффективно генерировать время для автобусов и где я должен хранить остановки. Если я добавлю все остановки в одно поле, а время - в другое, база данных не будет очень динамичной.

Если я сохраню все остановки один за другим в столбце, а затем время в другом столбце, будет много повторений, происходящих дальше, поскольку одна остановка имеет несколько раз.

Может быть, я что-то упустил, я только начал изучать SQL, и это задача, которую нам поставили.

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 24 марта 2010

Вам понадобится одна таблица, содержащая ваш Timetable:

  • идентификатор маршрута
  • Стоп ID
  • Время
  • Возможно, при необходимости, другие поля (направление, последовательность #, № блока и т. Д.)

Я бы порекомендовал создать отдельные таблицы Bus Stop (для хранения названий остановок, широт / длин и т. Д.) И Route (для хранения названия маршрута, первой остановки, последней остановки, направления и т. Д.).

Вы, наверное, уже знаете об этом, но расписание автобусов может очень быстро усложниться. Например:

  • Вам может потребоваться назначить определенные остановки как «Временные точки», которые отображаются в распечатанных графиках

  • Каждый маршрут может иметь несколько вариантов. Например, некоторые версии могут начинаться или заканчиваться на другой автобусной остановке

  • В субботу и воскресенье расписание, вероятно, будет другим, и большинство агентств меняют свои расписания ежеквартально

Возможно, вам придется рассмотреть некоторые из этих случаев и встроить их в свою схему.

Это помогает?

2 голосов
/ 24 марта 2010

Вот только один (из многих) способов сделать это:

Похоже, вы, вероятно, хотите иметь таблицу routes, которая описывает каждый маршрут и имеет время начала.

Затем таблица stops с описаниями и временем ожидания автобуса на каждой остановке.

Таблица stopDistanceMapping описывает расстояние между двумя остановками и время в пути между ними.

Наконец, ваша таблица routeMap свяжет отдельного пользователя routes со списком stops. Затем вы можете заполнить routes таблицу расстояний и времени, используя время ожидания от каждой отдельной остановки и время / расстояния от stopDistanceMapping.

Удачи!

0 голосов
/ 24 марта 2010

На (очень грубом) 1-м проходе я бы сохранил время прохождения автобусного маршрута в следующей таблице:

RouteID StartingLocationID  EndingLocationID TravelTime

Также я бы держал таблицу остановок, такую ​​как:

StopID Address City etc... (whatever other information you need about each location)

Для самих маршрутов я бы сохранил:

RouteID StartingLocationID RouteStartTime

Очевидно, что вы должны адаптировать это к своим потребностям, но это должно дать вам место для начала.

...