【问题标题】:Best database schema for country, region, county, town国家、地区、县、镇的最佳数据库模式
【发布时间】:2017-04-26 14:33:36
【问题描述】:

我有国家、地区、县、镇数据,我目前正在选择两种架构设计(如果有更好的,请告诉我)。

我首先想到

  • 国家

    • 身份证
    • 姓名
  • 地区

    • 身份证
    • 国家标识
    • 姓名
    • 身份证
    • 区域标识
    • 姓名
  • 城镇

    • 身份证
    • 县号
    • 姓名

但是要获得一个国家/地区的所有城镇,您必须进行 3 个内部连接才能进行过滤。我想这可能还可以,但可能很贵?

另一个设计是:

  • 国家

    • 身份证
    • 姓名
  • 地区

    • 身份证
    • 姓名
    • 身份证
    • 姓名
  • 城镇

    • 身份证
    • 国家标识
    • 区域标识
    • 县号
    • 姓名

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

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

【问题讨论】:

  • 为什么不:地理{TownName, CountyName, RegionName, CountryName}?所有四个属性都是关键。

标签: sql database database-design database-schema


【解决方案1】:

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

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

  • 城镇 ID
  • 镇名
  • 县名
  • 地区名称
  • 国家/地区名称

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-30
    • 2018-10-16
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 2011-10-12
    • 2012-03-29
    相关资源
    最近更新 更多