2012-09-24 155 views
1

在開發一個網站或Web應用程序,我不知道什麼時候就需要世界各國的列表中的最佳實踐 - 是它更好地使用國家表在SQL中,將所有值存儲到XML或其他東西?最佳實踐(SQL,XML,...)

在例子中,讓我們說,我需要存儲的國家爲每個用戶(在SQL)和我需要在我的網站使用一個(或多個)的下拉列表中的國家的名單。

回答

0

我認爲,有很多好的方法可以做到這一點。 爲了適合您的需求,您應該描述您需要什麼(翻譯?)

如果您將您的國家存儲在SQL數據庫中,那麼geonames.org上有一個可立即導入的解決方案,轉儲可以下載在這裏:http://download.geonames.org/export/dump/

在我看來,這是一個很好的起點。

+0

我也爲自己的解決方案(http://peric.github.com/GetCountries/),但我仍然想知道什麼是最佳做法。 正如我之前所說的,我需要爲每個用戶(在數據庫中)存儲國家/地區數據,並且我需要在我的網站上有一個用戶可以選擇國家/地區的下拉菜單 - 翻譯並不重要。我只是更有意義,更大的Web應用程序如何處理? – dperitch

+0

爲每個用戶存儲哪些數據?該國本身是共享的,不是嗎?如果你打算擴展非常大,我建議看一看nosql-databases(我的最愛:mongodb和redis),它比較容易擴展(但也有缺點) – RomanKonz

2

假設您希望您的用戶在該列表中只有只有,DBMS將需要強制FOREIGN KEY從用戶到列表,並且這隻有在列表位於數據庫表中時纔有可能。

如果您需要,您還可以更輕鬆地對數據庫表進行時間過濾或JOININg 。

哦,順便說一句,countries do change,所以你不能使這個列表完全不變,這是一個額外的參數,用於將它存儲在數據庫表中。


例如,用戶可能會有所只存儲國家代碼,在這種情況下,你必須與各國表加入它來獲得完整的國家名稱。

4

如果你想存儲的國家爲每個用戶(可能節省CountryId在用戶表西服最好的),你應該有單獨的表的國家,並從用戶表到國表FOREIGN KEY參考。當國家名稱更改時,您還可以使用管理面板添加/更改國家/地區名稱。

但有趣的是,你需要查詢數據庫每次頁面加載,讓那些「幾乎不變」的所有國家名稱!。

用於這種情況的解決方法是先得到所有國家的名稱和相應的緩存。當您第二次填充國家/地區組合時,請從緩存中獲取國家/地區列表。

  • 如果緩存爲空,則得到國家表中的所有國家和如果緩存項存在,則使用緩存的國家(沒有數據庫查詢)
  • 當您從管理部分更改國名,重新緩存它們
  • 國緩存也

這種方法,如果你不喜歡每一次查詢數據庫最適合的頁面加載與200多個記錄是幾乎不變,很少更新。這種方法也減少了數據庫開銷。

+0

在附註中,一些DBMS會緩存查詢結果和[MySQL似乎是其中之一](http://dev.mysql.com/doc/refman/5.5/en/query-cache.html),這對於大多數靜態數據來說非常有用。它可能不如定製的客戶端緩存那麼快,但可以在不更改現有客戶端的情況下使用。 –