【问题标题】:Country State City Table - ID or name国家/地区城市表 - ID 或名称
【发布时间】:2017-06-30 23:18:06
【问题描述】:

您好,我正在重新审视我的 mysql 数据库的设计以提高效率..

目前我有 3 张桌子

tble 国家: 国家ID,国家名称

表状态: 州ID,州名,国家ID

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

我在想是不是更好...

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

  2. 表城市中的州名而不是州ID

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

【问题讨论】:

    标签: mysql database


    【解决方案1】:

    如果您想要更少的查询,可以使用一些技术调用 denormalization

    您可以根据自己的需要衡量最重要的内容。

    更多关于恶魔化含义的信息来自techopidiawikipedia

    【讨论】:

      【解决方案2】:

      全世界大概有

      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 例如美国-纽约

      因此 iso 州代码包含 iso 国家代码。

      根据您提供的更多信息进行更新:

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

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

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

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

      你也可以使用 enum 作为城市,我不知道美国有多少个城市,但我一开始并不鼓励这样做。

      【讨论】:

      • 例如在属性网站中,每次我进行插入、更新或选择时 - 我必须运行另一个查询以将 id 转换为 name 并将 name 转换为 id .... 就像填充下拉列表列表,做一个搜索输入框(ajax自动完成)..等等..我要问的是我应该将代码输入mysql而不是usa put 1,然后在需要时将1转换为usa,还是我应该继续插入美国...网络上的大多数示例都使用基于代码的结构,我个人认为这是额外的负载
      猜你喜欢
      • 2019-10-27
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      相关资源
      最近更新 更多