【问题标题】:Which scheme is best for storing country, region and city data哪种方案最适合存储国家、地区和城市数据
【发布时间】:2018-07-24 21:07:14
【问题描述】:

我需要存储有关国家、地区和城市的信息。我应该使用哪个架构:

表格:

  1. 国家(ID、代码、名称);
  2. 区域(id、ctry_id、代码、名称);
  3. 城市(id、rgn_id、代码、名称)。
| id | code | name |
| 1  | US   | USA  |

| id | ctry_id | code | name  |
| 1  | 1       | TX   | Texas |

| id | rgn_id | code | name   |
| 1  | 1      | DS   | Dallas |

  1. 位置(id、pid、类型、名称);
| id | pid | type | name   |
| 1  | 0   | ctry | USA    |
| 2  | 1   | rgn  | Texas  |
| 3  | 2   | cty  | Dallas |

哪种方法更好?

【问题讨论】:

  • 第一种方法可能是您在实践中想要的。不过,第二种方法确实有一个优势,它允许您为地址定义任何层次结构。
  • @TimBiegeleisen:非常感谢。
  • @TimBiegeleisen:现在我正在使用第一种方法,但我正在考虑使用第二种方法,这就是我问这个问题的原因。
  • 如果地址架构是固定且规则的,例如每个地址总是在美国,那么我认为第一种方法没有任何问题。如果架构可以更多样化,那么第二种方法看起来更有吸引力。
  • @TimBiegeleisen:是的,还有更多国家,非常感谢! )))

标签: mysql


【解决方案1】:

所以这取决于你真正想要的是什么。

我猜想选项 2 在速度方面可能会更高效,但代价是表格最终会因大量条目而变得非常混乱。我建议也许将类型字段限制为已知类型的列表,并且仅在需要时使用这种方法进行更改。还要考虑对需要维护它的数据知之甚少的人会有什么感觉。

第一个选项可能没有那么快,但会更有条理,并且使用适当命名的表。这可能是您不熟悉数据的同事会感谢您的方式。

我会尝试选项 1,如果它满足您的性能需求,请选择该选项。如果它对您来说太慢,请尝试第二个。

就个人而言,我更喜欢第一个。有时,性能上的轻微影响值得阅读。其他时候没有。

祝你选择好运。

【讨论】:

  • 为什么第一种方法会比第二种方法慢?
  • 非常感谢!我很感激! )))
  • @TimBiegeleisen 我不一定说它会更慢,但我使用的一般建议是有时以关系方式构建的数据库可能有限制,在某些情况下可能比2 中概述了 NoSQL 风格的方法。正如我在回答中所说,我的首选是选择 1,因为它似乎结构更好。但是,如果性能很重要并且您知道维护成本,那么选项 2 可能会执行得更好,但与任何事情一样,应进行性能测试以确认。抱歉,如果我的回答中没有说明这一点。
【解决方案2】:

我会说模式 1 是关系型的,这是 mysql 所期望的,我认为它会表现得更好。但是如果您需要使用像 couchdb 这样的 noSqls,那么模式 2 就是它的工作原理,它适用于查询,但不适用于生成报告。

【讨论】:

    猜你喜欢
    • 2015-11-18
    • 2011-10-12
    • 1970-01-01
    • 2012-03-29
    • 2017-06-17
    • 2011-04-28
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    相关资源
    最近更新 更多