Я разрабатываю базу данных MySQL и соответствующее приложение RoR, которое будет содержать различные предприятия, у каждого предприятия будет адрес.
Требование этого приложения - выполнять поиск в базе данных по городу / стране (это касается предприятий по всей Европе / Великобритании). Результаты поиска будут возвращены ближайшим городом в этой стране.
Вот приблизительный ERD:
Как лучше всего организовать БД? Следует ли переместить поле города в отдельную таблицу? Должен ли я хранить GPS-координаты для каждой компании?
Спасибо!
Ответ 1 · рейтинг 2 · D'Arcy Rittich
Я бы сохранил город в отдельной таблице с широтой / долготой ратуши (или центра города). Затем для каждого магазина я сохранял широту / долготу.
Это позволит вам рассчитать расстояние от магазина до центра города и ранжировать по расстоянию, чтобы вы могли показать верхнюю N.
Если позже вы сохраните местоположение пользователей, то ваш запрос будет легко изменить, чтобы показать расстояние от местоположения пользователя.
Ответ 3 · рейтинг 1 · Jesse Wolgamott
Я думаю, что наличие стран и почтовых индексов - это перебор, не беспокойтесь. В таблице "Страны" укажите адрес, город, штат, почтовый индекс, страну, широту и долгосрочность.
Затем используйте GeoKit для геокодирования вашего адреса в Lat / Lng, если ваш адрес обновлен до_save.
Тогда вы сможете быть крутым и говорить что-то вроде (найти все компании в радиусе 10 миль от этого адреса)
Business.within.find(:all, :origin=>'100 Spear st, San Francisco, CA', :within=>10)
Ресурсы: