Skip to content

区划码结构与数据模型

12 位统计用区划代码结构 2+2+2+3+3

11      01      01      001       001
省(2)   市(2)   县(2)   乡镇(3)   村(3)
位段语义DIVISION_LEVEL
1省(2)省/自治区/直辖市PROVINCE
2+市(2)地级市/地区/州/盟CITY
3+县(2)县/区/县级市COUNTY
4+乡镇(3)乡/镇/街道TOWNSHIP
5+村(3)村委会/居委会VILLAGE

码工具(判级、取父码、补零)见 @cndiv/core

2023 · NBS 五级全量 · cache.db
每下探一级,行政单元数量放大近一个数量级——村级独占全量 93%
102103104105
省级省/自治区/直辖市
31
地级地级市/州/盟
342
县级县/区/县级市
2,975
乡级乡/镇/街道
41,351
村级村委会/居委会
620,572
对数刻度(横轴每格 ×10)。总量 665,271 条中村级 620,572 条,占 93.3%;这也是为什么「零爬虫、注水本地 SQLite」的分发方式必要——数据体量集中在最底层。

存储范式:扁平邻接表

存储为扁平邻接表,复合主键 (code, year) 支持同一区划码跨年份版本化:

sql
divisions(
  code,              -- 12 位区划码
  name,
  level,             -- 1..5
  parent_code,       -- 邻接表:指向父级 code
  year,              -- 版本维度,与 code 组成复合主键
  status,            -- active / deprecated ...
  source_type,       -- 来源置信度分档(见下)
  confidence_score
)
-- PRIMARY KEY (code, year)

完整 DATABASE_SCHEMA(Zod 单一真相源)见 @cndiv/data-protocol

来源置信度分档

每条数据带来源类型,置信度由高到低 4 档:

official_nbs  >  mca_decree  >  community  >  shadow_map
国家统计局        民政部令        社区 Patch      商业地图影子

两个必须知道的坑

  1. 复合主键 (code, year):任何点查都要带 year,否则跨年份多条会歧义。@cndiv/reader 已强制。
  2. 直辖市「市辖区」占位层:北京/上海等在 市→区 之间有一层「市辖区」占位。reader 的 skipPlaceholder 可穿透到真实区县。

编制规则(官方口径)

数据来源于公开政府网站(国家统计局、民政部国家地名信息库),仅供学习与研究使用。代码以 MIT 许可。