2010-03-23 7 views
4

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

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

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

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

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

+0

Как обозначаются остановки? У них есть уникальные номера или имена? –

+0

У всех есть 10 остановок? Проходит цикл 3 раза в день? То же самое для всех маршрутов? Звучит как довольно сложный вопрос о домашнем задании ... – FrustratedWithFormsDesigner

+1

Конечно, реальное планирование автобусов никогда не бывает таким простым или простым ... –

ответ

3

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

  • Route ID
  • Stop ID
  • Время
  • Возможно другие поля по мере необходимости (направление, последовательность # 's, Блок #, и т. д.)

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

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

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

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

  • график, вероятно, будет отличаться в субботу и воскресенье, и большинство агентств изменить свои графики квартальных

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

Помогло ли это?

+0

Привет, это очень полезно. На данный момент у меня есть другая таблица для разных цветных маршрутов, все они связаны с «главной» таблицей через внешние ключи . Я думал, что я мог бы сохранить время, посмотреть, чтобы добраться до каждой остановки, а затем использовать функции времени PHP, чтобы вычислить время, как цикл генерирует мое расписание. Надеюсь, я иду в правильном направлении. Возможно ли установить поле иметь значение по умолчанию? Например, каждое имя стопа под таблицей blue_route имеет поле, которое автоматически присваивает ему текст «синий», например, увеличивающее поле. Надеюсь, что это имеет смысл: S – Henryz

+0

Я рекомендую использовать только одну таблицу для всех маршрутов, но кроме этого ваш подход звучит. Вы можете использовать ключевое слово DEFAULT для установки значений таблицы по умолчанию, просто проверьте документы для используемой базы данных. –

0

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

RouteID StartingLocationID EndingLocationID TravelTime 

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

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

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

RouteID StartingLocationID RouteStartTime 

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

+0

Эй, спасибо, это то, о чем я подумал, но с остановками в таблице, как я могу показать, какая остановка относится к разным маршрутам? Особенно, если одна остановка относится к нескольким маршрутам – Henryz

+0

Извините, я думаю, что я был неясно .... StartLocationID/EndingLocationID должен соответствовать записи в таблице Stops. Глядя на комбинацию RouteID и (InitialID OR EndingID), следует предоставить точную карту маршрута каждой шины. –

2

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

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

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

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

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

Удачи вам!

+0

Это было бы гораздо более эффективным способом сделать это, я просто не уверен, как я могу связать остановки с различными маршрутами. Так, например, если бы я хотел выбрать все остановки, принадлежащие маршруту blue. Это было бы нормально, но что, если некоторые остановки принадлежали нескольким маршрутам: S Зарабатывал этот материал базы данных через неделю, и это довольно хардкор, мне это нравится :) – Henryz