Как спроектировать эту базу данных «автовокзалов»?

0

Я хочу создать базу данных о автостанциях. В городе около 60 автобусов, каждая из которых содержит следующие данные:

  • BusID
  • BusName
  • Списки станций в пути (вперед и назад)

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

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

Как я могу создать эту базу данных?

Большое спасибо.

  • 0
    Я бы разработал это тщательно. RouteID / StationID / Bussid. Это слишком очевидно?
  • 0
    на самом деле, не моя домашняя работа. :) Я пытаюсь помочь своему другу решить проблему.
Показать ещё 2 комментария
Теги:
database
design

7 ответов

10
Лучший ответ

Вы просмотрели ответы на базы данных, чтобы узнать, есть ли схема, соответствующая вашим требованиям?

  • 1
    +1 - интересный сайт ...
4

Мне пришлось решить эту проблему, и я использовал это:

Линия  - номер  - имя

Станция  - имя  - широта  - долгота  - is_terminal

Holiday  - Дата  - описание

Маршрут  - line_id  - from_terminal: station_id  - to_terminal: station_id

Расписание маршрутов  - route_id  - is_holiday_schedule  - start_at

Остановка маршрута  - route_id  - station_id  - enlapsed_time_from_start: в минутах

Хорошо ли это для вас?

4

Некоторые случайные мысли, основанные на путешествиях на лондонских автобусах In My Youth, потому что это может быть довольно сложным, я думаю.

Вам могут понадобиться сущности для следующего:

  • Шина - физический объект с определенной моделью (т.е. конкретная посадочная способность и доступ для инвалидов, а также размеры и т.д.) и VIN.
  • Автобусная остановка - место остановки автобуса. Обычно автобусные остановки попадают парами, по одному для каждой стороны дороги, но иногда они идут по односторонней дороге.
  • Маршрут - последовательность автобусных остановок и маршрут между ними (существует несколько возможных дорог). Иногда автобусы не запускают весь маршрут или не останавливаются (быстрое обслуживание). Является ли маршрут только одним направлением, или это так? Возможно, маршрут на самом деле представляет собой цикл, а не туда и обратно.
  • Сервис - автобус, следующий по определенному маршруту
  • Scheduled Run - событие, когда автобус на определенной службе следует определенному маршруту. Он начинается с некоторой части маршрута, заканчивается в другой части и, возможно, пропускает определенные остановки (см. 3).
  • Фактический прогон - конкретная шина после определенного запланированного прогона. В какое время это началось, в какое время оно доходило до конкретных остановок, сколько людей было включено и выключено, какой билет у них был?
  • 0
    Похоже, у вас все еще есть отличные знания о транзите. Я работал над реальной производственной системой для отслеживания автобусов в соответствии с расписанием, и она использовала каждую из упомянутых вами концепций, хотя некоторые термины были немного другими. Ах, воспоминания :)
  • 0
    Хех, спасибо Я только когда-либо был невинной жертвой общественного транспорта, но иногда сложно отключить моего внутреннего гика.
1

Я бы взломал его.

bus_id          int
path            varchar(max)

Если шина проходит через следующие станции (в этом порядке):

01
03
09
17
28

Затем я поместил бы запись, где путь был установлен на

'-01-03-09-17-28-'

Когда кто-то хочет найти автобус, чтобы добраться от станции 03 до 28, тогда мой оператор select

select * from buses where path like '%-03-%-28-%'

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

1

(Это звучит как домашнее задание, поэтому я не дам полного ответа.)

Кажется, вам просто нужно соотношение "многие ко многим" между автобусами и остановками, используя 3 таблицы. Запрос с двумя внутренними соединениями даст вам шины, которые останавливаются на двух конкретных остановках.

0

то, что вы считали хорошим, в некоторых случаях оно может быть или не быть эффективным. Я думаю, что yo u должен создавать таблицы как таблицу1 (BusID, BusName), таблицу 2 (список станций, идентификатор шины). Я думаю, это поможет. И попробуйте использовать объединения между этими двумя таблицами, чтобы получить результат. Еще одна вещь, если возможно, попытаться нормализовать таблицы, которые помогут вам.

0

Я бы выбрал 3 таблицы:

автобус станций bus_stations

"шина", для которой обозначено имя, "станции" для идентификатора и имен станции и "bus_stations", чтобы подключить те другие 2 таблицы, которые будут иметь bus_id, station_id_from station_id_to

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

60 автобусов не окажут такого большого влияния на производительность, хотя.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню