国家,地区,县,镇的最佳数据库架构

时间:2016-12-11 17:10:59

标签: sql database database-design database-schema

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

我首先想到了

  • 国家

    • 编号
    • 名称
  • 区域

    • 编号
    • CountryId
    • 名称
    • 编号
    • RegionId
    • 名称
    • 编号
    • CountyId
    • 名称

然而,这项工作是否要让一个国家的所有城镇都有3个内部联接来进行过滤。我想这可能没事,但可能很贵?

另一种设计是:

  • 国家

    • 编号
    • 名称
  • 区域

    • 编号
    • 名称
    • 编号
    • 名称
    • 编号
    • CountryId
    • RegionId
    • CountyId
    • 名称

这样可以说所有分层数据都在底部,你可以重新开始,但是如果你想让一个国家的所有地区都搞砸了,我们就会怀疑第一个设计是否最好。

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

1 个答案:

答案 0 :(得分:2)

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

如果这是非常静态的数据,一次全部更新,外部引用都是城镇,那么我可能会去一个非规范化的维度。也就是说,将信息存储在一行中:

  • Town Id
  • 城镇名称
  • 县名
  • 地区名称
  • 国家/地区名称

在上述情况下,不需要县(区域和国家)的ID(假设)。

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

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

换句话说,您需要知道如何使用数据来定义适当的数据模型。