【问题标题】:Search DB (of businesses) by location按位置搜索(企业)数据库
【发布时间】:2010-11-03 18:09:59
【问题描述】:

我正在设计一个 MySQL 数据库和一个相应的 RoR 应用程序,它将容纳各种业务,每个业务都有一个地址。

此应用程序的一项要求是按城市/国家/地区搜索数据库(这将包含欧洲/英国的企业)。搜索结果将由该国家/地区最近的城市返回。

这是一个粗略的 ERD:

组织数据库的最佳方式是什么?我应该将城市字段移到自己的表中吗?我应该为每个商家存储 GPS 坐标吗?

谢谢!

【问题讨论】:

  • 你所拥有的似乎很正常。如果您想根据距离定位商家,则需要坐标。
  • 是仅限于用户自己国家的搜索,例如我住在伦敦,搜索一家奶酪公司,您的系统建议一家距离公司只有 30 英里,但它在法国的海峡对面!真的对我没有多大好处,因为我讨厌旅行 - 或者那会是你系统中的有效命中?
  • @f00 感谢您的洞察力,我们计划将其限制在国家/地区。因此,如果您在英国进行搜索,它只会返回附近的结果。
  • 好,那你可能想看看我的解决方案stackoverflow.com/questions/3983325/…

标签: mysql ruby-on-rails database database-design geolocation


【解决方案1】:

我会将城市存储在一个单独的表格中,其中包含市政厅(或市中心)的纬度/经度。然后对于每家商店,我都会存储纬度/经度。

这将允许您计算从商店到市中心的距离,并按距离排名,这样您就可以显示前 N 个。

如果您稍后存储用户的位置,那么很容易修改您的查询以显示与用户位置的距离。

【讨论】:

    【解决方案2】:

    您不需要从Businesses 表链接到countryID,因为PostalCodes 表已经具有Countries 表的FK。

    【讨论】:

      【解决方案3】:

      我认为拥有国家和邮政编码是矫枉过正,不会打扰。在您的国家/地区表中,包含地址、城市、州、邮政编码、国家/地区、纬度和 lng。

      如果您的地址在 before_save 之前更新,则使用 GeoKit 将您的地址地理编码为 Lat/Lng。

      然后你可以很厉害,说出类似(查找此地址 10 英里范围内的所有商家)之类的话

      Business.within.find(:all, :origin=>'100 Spear st, San Francisco, CA', :within=>10)
      

      资源:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-27
        • 1970-01-01
        • 1970-01-01
        • 2021-10-24
        • 1970-01-01
        • 1970-01-01
        • 2011-03-13
        相关资源
        最近更新 更多