嗨,我在中東歐我的MySQL數據庫經效率的設計..國家省份城市表 - ID或名字
目前我有3個表
tble國家: 國家ID,國家名稱
表狀態: 狀態ID,國家名稱,國家ID
表城市: 城市ID,城市名稱,狀態ID
我想它是否是最好有...
國名,而不是表狀態國家ID
狀態名稱,而不是狀態ID的表城市
這是因爲在我的代碼中,我不得不運行額外的查詢來將國家ID,州ID和城市ID從數字轉換爲字母(例如。 1到美國)...只是按字母順序參考不會更好...(更少查詢)
嗨,我在中東歐我的MySQL數據庫經效率的設計..國家省份城市表 - ID或名字
目前我有3個表
tble國家: 國家ID,國家名稱
表狀態: 狀態ID,國家名稱,國家ID
表城市: 城市ID,城市名稱,狀態ID
我想它是否是最好有...
國名,而不是表狀態國家ID
狀態名稱,而不是狀態ID的表城市
這是因爲在我的代碼中,我不得不運行額外的查詢來將國家ID,州ID和城市ID從數字轉換爲字母(例如。 1到美國)...只是按字母順序參考不會更好...(更少查詢)
全世界有大約
260 country/regions
5000 states
many many cities
設計變化的基礎上,你所需要的。
1 - 對於微小的存儲目的:
country(id,country)
state(id,state,country_id)
city(id,city,state_id)
2 - 對於快速查詢的目的:
city(id,city,state,country)
3 - 對於中間道路的目的:
country(code,country)
state(code,country) -- you might merge country and state into one table based on code
city(state_code,city)
您可能有興趣查看一下iso代碼:
https://en.wikipedia.org/wiki/ISO_3166-1例如,美國
https://en.wikipedia.org/wiki/ISO_3166-2例如US-NY
結果ISO狀態代碼包含ISO國家代碼。
UPDATE按照更多信息從您:
如果要爲美國設計性網站。
1 - 你不需要一個國家表,最有可能的所有屬性都內美國
2 - 有內美國小於60點的狀態,所以你可以用枚舉保存心滿意足。由於幾乎所有人都會理解NY = New York,因此您不需要州表。
3 - 所以你需要一個城市表。因爲您將使用city_id超過10,000,000個財產記錄。
usa_cities(
id int PK
state enum('NY', 'LA', ...)
city varchar
...
)
properties(
id int PK
city_id int,
....
)
財產表通常是非常大的,你可能會跳過狀態表,以及反規範化設計少加入,加快查詢:
properties (
id int PK,
state enum('NY', 'LA',...)
city varchar
...
)
您可能能夠使用枚舉城市我也不確定美國有多少城市,但我的第一個想法並沒有鼓勵。
例如在一個屬性網站,每當我做一個插入,更新或選擇 - 我必須運行另一個查詢將ID轉換成名稱和名稱到ID ....喜歡填充下拉列表,做一個搜索輸入框(ajax自動完成)..等等..我要求問的是我應該輸入代碼到MySQL而不是美國放1,然後轉換1到美國whenerever需要或應該我只是繼續前進,插入美國...網上的大多數例子都使用基於代碼的結構,我個人覺得這是額外的負載 – DragonFire