Database design 国际用户网站数据库设计提示

Database design 国际用户网站数据库设计提示,database-design,web-applications,geocoding,Database Design,Web Applications,Geocoding,我正在开发一个交友网站,用户可以在该网站上注册 世界。约会区又被分为各个城市 世界。 我在这里看到的问题是,我没有覆盖所有城市的数据库 遍布全球。 我将亲自确认每个用户,因此我有机会查看 用户所在城市和国家。 主要的方法是,在数据库中给每个城市一个“城市id” 就好像一个人从纽约加入,我给他idUS\u NEWYORK 如果该人员从法兰克福加入,则他们将获得法兰克福的id 这两个用户在数据库中都有自己的城市名称,而且都是 写下和他们写的一样的东西。那么比如说, “法兰克福”而不是“法兰克福美茵河

我正在开发一个交友网站,用户可以在该网站上注册
世界。约会区又被分为各个城市
世界。
我在这里看到的问题是,我没有覆盖所有城市的数据库
遍布全球。
我将亲自确认每个用户,因此我有机会查看
用户所在城市和国家。
主要的方法是,在数据库中给每个城市一个“城市id”

就好像一个人从纽约加入,我给他idUS\u NEWYORK
如果该人员从法兰克福加入,则他们将获得法兰克福的id

这两个用户在数据库中都有自己的城市名称,而且都是
写下和他们写的一样的东西。那么比如说,

“法兰克福”而不是“法兰克福美茵河畔”作为正确的名称或,
“纽约”而不是“纽约”作为正确的名称

这样,我就可以让每个用户都继续写作,并且可以给城市一个特殊的id
并通过该ID运行所有查询

这是我自己的解决方案,我认为还不错。您可能有
我能做得更好吗

请记住,我需要每个国家的每个城市
我正在运行此服务,如果您愿意推荐,我将获得一个数据库
从某处:)


感谢阅读。

为什么不使用geonames.org或Google的geocoding API等地理编码服务器来查找位置的规范名称以及纬度/经度。我假设您需要某种规范形式的位置,以便您可以找到最接近的匹配项,对吗?嗯,纬度/经度是去那里的路

例如,如果你问谷歌关于“法兰克福美茵河畔”的问题,比如:

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>
geocode/xml?地址=Frankfurt%20am%20Main&sensor=false'
好啊
地点
政治的
德国法兰克福
法兰克福
法兰克福
地点
政治的
法兰克福美因酒店
法兰克福美因酒店
行政区二级
政治的
黑森
他
行政区一级
政治的
德国
判定元件
国家
政治的
50.1115118
8.6805059
近似
49.9968858
8.4243871
50.2258641
8.9366247
50.0155200
8.4727150
50.2269512
8.8004960


看起来很全面。

我需要的是,我试图强迫人们从他们连接的地方选择他们的城市。因为他们日期上的数据只会出现在他们注册的城市,或者更好的说,他们目前正在漫游。我怎么能这么做?我只会有用户的ip,或者如果可能的话,他们的无线网卡的位置,比如skyhook?问题是,例如,我位于柏林,想要注册,服务如何知道我实际上在柏林?这个城市的名字已经足够了。顺便说一句,谢谢你的扩展回答。啊,不幸的是,如果我每天超过2500个请求,我需要一个定价为每年10.000的扩展许可证,我怀疑我现在能负担得起。对于这个问题,有没有价格合理的解决方案?Geonames.org有更高的允许速率-每小时3000个请求。我想人们会给你一个真实的位置。如果他们不给你真实的信息,他们会得到糟糕的匹配。那是他们的问题,不是你的。如果你真的在爱荷华州的得梅因,那么在柏林注册一家约会服务并要求相亲没有多大意义。