Я хочу создать базу данных о автостанциях. В городе около 60 автобусов, каждая из которых содержит следующие данные:
Эта база данных должна быть эффективной при поиске, например, когда пользователь хочет перечислить шины, которые проходят по станциям А и В, он должен работать быстро.
В моей первой мысли я хочу поставить станции в отдельную таблицу, включая StationId и Station, а затем список станций будет содержать эти StationIds. Я гость, он может работать, но не уверен, что он эффективен.
Как я могу создать эту базу данных?
Большое спасибо.
Вы просмотрели ответы на базы данных, чтобы узнать, есть ли схема, соответствующая вашим требованиям?
Мне пришлось решить эту проблему, и я использовал это:
Линия - номер - имя
Станция - имя - широта - долгота - 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: в минутах
Хорошо ли это для вас?
Некоторые случайные мысли, основанные на путешествиях на лондонских автобусах In My Youth, потому что это может быть довольно сложным, я думаю.
Вам могут понадобиться сущности для следующего:
Я бы взломал его.
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-%'
Не масштабируемый, а не элегантный, но простой и простой, и он не будет перебирать столы, как безумные, когда пытается найти маршрут. Конечно, он работает только при наличии одной шины, проходящей через две указанные станции.
(Это звучит как домашнее задание, поэтому я не дам полного ответа.)
Кажется, вам просто нужно соотношение "многие ко многим" между автобусами и остановками, используя 3 таблицы. Запрос с двумя внутренними соединениями даст вам шины, которые останавливаются на двух конкретных остановках.
то, что вы считали хорошим, в некоторых случаях оно может быть или не быть эффективным. Я думаю, что yo u должен создавать таблицы как таблицу1 (BusID, BusName), таблицу 2 (список станций, идентификатор шины). Я думаю, это поможет. И попробуйте использовать объединения между этими двумя таблицами, чтобы получить результат. Еще одна вещь, если возможно, попытаться нормализовать таблицы, которые помогут вам.
Я бы выбрал 3 таблицы:
автобус станций bus_stations
"шина", для которой обозначено имя, "станции" для идентификатора и имен станции и "bus_stations", чтобы подключить те другие 2 таблицы, которые будут иметь bus_id, station_id_from station_id_to
Это, вероятно, более сложное, что вам действительно нужно, но если вам нужно знать всю траекторию автобуса, а также из ведьмной станции приходит одна автобус, когда она идет на "B-станцию", быть полезным.
60 автобусов не окажут такого большого влияния на производительность, хотя.