国家、地区、县、镇的最佳数据库模式

Best database schema for country, region, county, town

我有国家、地区、县、城镇数据,我目前正在决定 2 种模式设计(如果有更好的,请告诉我)。

我第一个想到的

然而,要获得一个国家/地区的所有城镇,您必须使用 3 个内部联接来进行过滤。我想这可能没问题,但可能很贵?

另一个设计是:

这样一来,可以说所有分层数据都在底部,您可以返回上层,但是如果您想要一个国家/地区的所有区域,您就有点搞砸了,这让我们怀疑第一个设计是否最好。

您认为最好的架构设计是什么?

最好的数据库设计取决于数据的使用方式。

如果这是一次全部更新的非常静态的数据,并且外部引用全部指向城镇,那么我可能会选择非规范化维度。即,将信息全部存储在一行中:

  • 城镇编号
  • 城镇名称
  • 县名
  • 区域名称
  • 国名

在上述情况下,县、地区和国家的 id 不是必需的(假设)。

如果数据作为具有单独 ID 的单独 table 提供,并且这些 table 可以单独更新或逐行更新,那么单独的 table因为每一个都是有道理的。将所有 ID 放入 towns table 可能是也可能不是一个好主意。插入和更新数据时,您必须验证和维护层次结构。

如果您需要每个级别的 ID,那么您应该有适当的 table 结构来声明外键约束。但是,这可能会变得复杂。外部实体是否具有可以处于任何级别的 "geography" 属性?外部人员总是知道它指的是什么级别吗?

换句话说,您需要知道数据将如何使用才能定义合适的数据模型。