国家、地区、县、镇的最佳数据库模式
Best database schema for country, region, county, town
我有国家、地区、县、城镇数据,我目前正在决定 2 种模式设计(如果有更好的,请告诉我)。
我第一个想到的
国家
- 编号
- 姓名
地区
- 编号
- 国家/地区 ID
- 姓名
县
- 编号
- 地区编号
- 姓名
城镇
- 编号
- CountyId
- 姓名
然而,要获得一个国家/地区的所有城镇,您必须使用 3 个内部联接来进行过滤。我想这可能没问题,但可能很贵?
另一个设计是:
国家
- 编号
- 姓名
地区
- 编号
- 姓名
县
- 编号
- 姓名
城镇
- 编号
- 国家/地区 ID
- 地区编号
- CountyId
- 姓名
这样一来,可以说所有分层数据都在底部,您可以返回上层,但是如果您想要一个国家/地区的所有区域,您就有点搞砸了,这让我们怀疑第一个设计是否最好。
您认为最好的架构设计是什么?
最好的数据库设计取决于数据的使用方式。
如果这是一次全部更新的非常静态的数据,并且外部引用全部指向城镇,那么我可能会选择非规范化维度。即,将信息全部存储在一行中:
- 城镇编号
- 城镇名称
- 县名
- 区域名称
- 国名
在上述情况下,县、地区和国家的 id 不是必需的(假设)。
如果数据作为具有单独 ID 的单独 table 提供,并且这些 table 可以单独更新或逐行更新,那么单独的 table因为每一个都是有道理的。将所有 ID 放入 towns
table 可能是也可能不是一个好主意。插入和更新数据时,您必须验证和维护层次结构。
如果您需要每个级别的 ID,那么您应该有适当的 table 结构来声明外键约束。但是,这可能会变得复杂。外部实体是否具有可以处于任何级别的 "geography" 属性?外部人员总是知道它指的是什么级别吗?
换句话说,您需要知道数据将如何使用才能定义合适的数据模型。
我有国家、地区、县、城镇数据,我目前正在决定 2 种模式设计(如果有更好的,请告诉我)。
我第一个想到的
国家
- 编号
- 姓名
地区
- 编号
- 国家/地区 ID
- 姓名
县
- 编号
- 地区编号
- 姓名
城镇
- 编号
- CountyId
- 姓名
然而,要获得一个国家/地区的所有城镇,您必须使用 3 个内部联接来进行过滤。我想这可能没问题,但可能很贵?
另一个设计是:
国家
- 编号
- 姓名
地区
- 编号
- 姓名
县
- 编号
- 姓名
城镇
- 编号
- 国家/地区 ID
- 地区编号
- CountyId
- 姓名
这样一来,可以说所有分层数据都在底部,您可以返回上层,但是如果您想要一个国家/地区的所有区域,您就有点搞砸了,这让我们怀疑第一个设计是否最好。
您认为最好的架构设计是什么?
最好的数据库设计取决于数据的使用方式。
如果这是一次全部更新的非常静态的数据,并且外部引用全部指向城镇,那么我可能会选择非规范化维度。即,将信息全部存储在一行中:
- 城镇编号
- 城镇名称
- 县名
- 区域名称
- 国名
在上述情况下,县、地区和国家的 id 不是必需的(假设)。
如果数据作为具有单独 ID 的单独 table 提供,并且这些 table 可以单独更新或逐行更新,那么单独的 table因为每一个都是有道理的。将所有 ID 放入 towns
table 可能是也可能不是一个好主意。插入和更新数据时,您必须验证和维护层次结构。
如果您需要每个级别的 ID,那么您应该有适当的 table 结构来声明外键约束。但是,这可能会变得复杂。外部实体是否具有可以处于任何级别的 "geography" 属性?外部人员总是知道它指的是什么级别吗?
换句话说,您需要知道数据将如何使用才能定义合适的数据模型。