Country State City表-ID或名称



嗨,我正在重新考虑我的mysql数据库的设计以提高效率。。

目前我有3张桌子

tble国家:country id,country name

表状态:州id,州名称,国家id

餐桌城市:城市id,城市名称,州id

我在想是否最好有。。。

  1. 表状态中的国家名称而不是国家id

  2. 表城市中的州名称而不是州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国家代码。

根据您的更多信息更新:

如果你正在为美国设计房地产网站。

1-您不需要国家/地区表,很可能所有房产都在美国内

2-美国有不到60个州,所以你可以使用enum来保存状态。几乎所有人都会理解NY=纽约,因此您不需要州表。

3-所以你需要一张城市餐桌。因为您将对超过10000000个属性记录使用city_id。

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
...
)

你可能也可以用enum来表示城市,我不确定美国有多少城市,但我一想到这就不鼓励了。

如果您想要更少的查询,有一些技术可以调用反规范化

你可以根据自己的需要来衡量最重要的东西。

从techopidia和wikipedia 了解更多关于去极端化意义的信息

最新更新