2010-11-03 106 views
0

我正在設計一個MySQL數據庫和一個相應的RoR應用程序,它將持有各種業務,每個業務都會有一個地址。按地區搜索數據庫(企業)

此應用程序的一個要求是按城市/國家(這將持有企業跨歐洲/英國)搜索數據庫。搜索結果將由該國最近的城市返回。

這是一個粗略的ERD:alt text

什麼是組織數據庫的最佳方式?我應該將城市場地移到自己的桌子上嗎?我應該爲每個企業存儲GPS座標嗎?

謝謝!

+0

什麼你似乎已經夠正常了。如果您想根據距離查找商戶,則需要座標。 – Stephen 2010-11-03 18:12:51

+0

是限於用戶自己的國家的搜索,例如我住在倫敦,尋找一家奶酪公司,你的系統建議一家只有30英里外的公司,但它在法國的渠道對面!對我來說真的沒什麼好處,因爲我討厭旅行 - 或者會在你的系統中成爲有效的HIT? – 2010-11-03 18:31:19

+0

@ f00感謝您的洞察力,我們計劃將其限制在國家/地區。所以如果你在英國搜索,它只會返回附近的結果。 – christo16 2010-11-04 04:00:39

回答

2

我會將城市存儲在一個單獨的表格中,其中包含市政廳(或市中心)的緯度/經度。然後,我將存儲每個商店的緯度/經度。

這將允許您計算從商店到市中心等級按距離的距離,並且,這樣就可以顯示前N.

如果以後你存儲用戶的位置,那麼很容易頂mo動您的查詢以顯示距用戶位置的距離。

1

您不需要鏈接到Businesses表中的countryID,因爲PostalCodes表已經有一個FK到Countries表。

+0

好趕,謝謝! – christo16 2010-11-03 18:17:49

1

我認爲有國家和PostalCodes是矯枉過正,不會打擾。在你的國家/地區表中,有地址,城市,州,郵政編碼,國家,經緯度和lng。

然後如果您的地址更新before_save,則使用GeoKit將您的地址地理編碼爲Lat/Lng。

然後你就可以真棒,說喜歡的東西(搜尋到10英里,地址內的所有企業)

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

資源: