Советы по дизайну базы данных веб-сайта с международными пользователями

я разрабатываю сайт знакомств, на котором могут регистрироваться пользователи со всего
мира. Раздел знакомств снова разделен на города
со всего мира.
Проблема, которую я здесь вижу, заключается в том, что у меня нет базы данных, охватывающей все города
по всему миру.
Я подтверждая каждого пользователя вручную, так что это дает мне возможность просматривать
город и страну пользователей.
Основной основной подход заключается в том, чтобы присвоить каждому городу «city_id» в базе данных.

Например, если человек присоединяется из Нью-Йорка, я даю ему идентификатор US_NEWYORK
Если человек присоединяется из Франкфурта, он получает идентификатор DE_FRANKFURT.

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

"Франкфурт" вместо "Франкфурт-на-Майне" для правильного названия или
"NYC" вместо "Нью-Йорк" для правильного названия.

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

Это мое собственное решение, и я думаю, что оно не так уж плохо. У вас есть
идея, что я мог бы сделать лучше?

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

Спасибо за чтение.


person Herr    schedule 30.10.2010    source источник


Ответы (2)


Почему бы вам не использовать серверы геокодирования, такие как geonames.org или API геокодирования Google, чтобы найти каноническое имя для местоположений, а также широту/долготу. Я предполагаю, что вам нужны местоположения в какой-то канонической форме, чтобы вы могли найти наиболее близкие совпадения, верно? Ну, широта/долгота - это путь туда.

Например, если вы спросите Google о «Франкфурт-на-Майне», например:

curl 'http://maps.googleapis.com/maps/api/geocode/xml?address=Frankfurt%20am%20Main&sensor=false'

Вы получаете обратно все это:

geocode/xml?address=Frankfurt%20am%20Main&sensor=false'
<?xml version="1.0" encoding="UTF-8"?>
<GeocodeResponse>
 <status>OK</status>
 <result>
  <type>locality</type>
  <type>political</type>
  <formatted_address>Frankfurt, Germany</formatted_address>
  <address_component>
   <long_name>Frankfurt</long_name>
   <short_name>Frankfurt</short_name>
   <type>locality</type>
   <type>political</type>
  </address_component>
  <address_component>
   <long_name>Frankfurt am Main</long_name>
   <short_name>Frankfurt am Main</short_name>
   <type>administrative_area_level_2</type>
   <type>political</type>
  </address_component>
  <address_component>
   <long_name>Hesse</long_name>
   <short_name>HE</short_name>
   <type>administrative_area_level_1</type>
   <type>political</type>
  </address_component>
  <address_component>
   <long_name>Germany</long_name>
   <short_name>DE</short_name>
   <type>country</type>
   <type>political</type>
  </address_component>
  <geometry>
   <location>
    <lat>50.1115118</lat>
    <lng>8.6805059</lng>
   </location>
   <location_type>APPROXIMATE</location_type>
   <viewport>
    <southwest>
     <lat>49.9968858</lat>
     <lng>8.4243871</lng>
    </southwest>
    <northeast>
     <lat>50.2258641</lat>
     <lng>8.9366247</lng>
    </northeast>
   </viewport>
   <bounds>
    <southwest>
     <lat>50.0155200</lat>
     <lng>8.4727150</lng>
    </southwest>
    <northeast>
     <lat>50.2269512</lat>
     <lng>8.8004960</lng>
    </northeast>
   </bounds>
  </geometry>
 </result>
</GeocodeResponse>
person Paul Tomblin    schedule 30.10.2010
comment
Что мне нужно, так это попытаться заставить людей выбирать свой город, откуда они подключаются. Потому что данные об их датах будут отображаться только для города, в котором они зарегистрированы или, лучше сказать, в котором они в настоящее время бродят. Как я мог это сделать? Мне нужен только IP-адрес пользователя или, если возможно, местоположение его беспроводной карты, например, skyhook? Проблема в том, например, что я нахожусь в Берлине и хочу зарегистрироваться, как служба может узнать, что я на самом деле в Берлине? Достаточно было бы названия города. Спасибо, кстати, за ваш расширенный ответ. - person Herr; 30.10.2010
comment
ах, и, к сожалению, если я когда-нибудь превысю 2500 запросов в день, мне понадобится расширенная лицензия по цене 10 000 в год, которую я сомневаюсь, что могу себе позволить сейчас. Есть ли доступное решение этой проблемы? - person Herr; 30.10.2010
comment
Geonames.org имеет более высокие разрешенные скорости — 3000 запросов в час. - person Paul Tomblin; 30.10.2010
comment
Я предполагаю, что люди дадут вам истинное местоположение. Если они не дадут вам правдивой информации, они получат паршивые совпадения. Это их проблема, а не ваша. Нет особого смысла регистрироваться в службе знакомств и спрашивать о совпадениях в Берлине, если вы действительно находитесь в Де-Мойне, штат Айова. - person Paul Tomblin; 30.10.2010

http://www.geonames.org/

выглядит вполне исчерпывающе.

person Mr Hyde    schedule 30.10.2010