按位置搜索DB(业务)

时间:2010-11-03 18:09:59

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

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

此应用程序的要求是按城市/国家/地区搜索数据库(这将在欧洲/英国各地开展业务)。搜索结果将由该国家/地区最近的城市返回。

这是一个粗略的ERD:alt text

组织数据库的最佳方法是什么?我应该将城市场地移动到自己的桌子上吗?我应该为每个企业存储GPS坐标吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

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

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

如果您稍后存储用户的位置,则可以轻松调整查询以显示与用户位置的距离。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

然后你可以很棒并说出类似的话(找到距离这个地址10英里范围内的所有商家)

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

资源: