国家州城市表 - ID或名称

时间:2017-02-13 03:16:06

标签: mysql database

您好我正在设计我的mysql dbase以提高效率..

目前我有3张桌子

国家: 国家/地区ID,国家/地区名称

表状态: 州身份证,州名,国家身份证

表城: 城市ID,城市名称,州ID

我在想是否更好......

  1. 国家/地区名称,而不是表状态中的国家/地区ID

  2. 状态名称而不是表格城市中的州ID

  3. 这是因为我的代码中的每个地方都需要运行额外的查询来将国家ID,州ID和城市ID从数字转换为字母(例如1到美国)...按字母顺序引用不是更好..(少查询)

2 个答案:

答案 0 :(得分: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个州,因此您可以使用枚举来保存国家。因为几乎所有人都会理解NY =纽约,因此您不需要州表。

3 - 所以你需要一张城市桌。正如您将使用city_id获取超过10,000,000条财产记录。

usa_cities(
  id int PK
  state enum('NY', 'LA', ...)
  city varchar
  ...
)

properties(
  id int PK
  city_id int,
  ....
)

AS属性表通常非常大,您可以跳过状态表,并对设计进行反规范化以加快查询以减少连接:

properties (
  id int PK,
  state enum('NY', 'LA',...)
  city varchar
  ...
)

你也许可以将enum用于城市,我不确定美国有多少城市,但我没想到这一点。

答案 1 :(得分:0)

如果您想减少查询,可以使用一些技术调用非规范化

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

有关techopidiawikipedia

的恶魔化含义的更多信息