先说结论
站群的"站"不是拍脑袋起的名字,而是行政区划字典里的一个节点。字典做对了,建站就是勾选。
字典怎么存
city_regions
id, parent_id, level(1省/2市/3区县/4街道), name, code
- 全局共享,不按租户复制(4 万个节点 × N 个租户会爆炸)
- 平台后台维护,租户只读
- 街道级数据来自
pcas-code.json,合并导入 41,352 条
建站时怎么用
只选省 → 生成全省城市站;选到市 → 只生成该市;选到区县 → 前缀自动拼成 城市-区县。
好处:
- 不用手填城市名,避免错别字和重名
- 子域名前缀可以自动生成
- 门户的地区统计可以直接聚合
一个冗余字段的必要性
city_sites.province_id 是铺站时回填的省份冗余字段。为什么不在查询时 join?
因为门户要按省聚合"每个省有多少站",1.2 万行 join 4 万行字典,每次都要算。冗余一个字段,一次 group by 就出结果。
代价是:新增站点后必须回填(批量脚本已处理),否则统计会漏。
字典维护的坑
- 行政区划会改名、合并、撤县设区
- 改名后 URL 要不要变?变了就要 301
- 编码(行政区划代码)比名字稳定,尽量用它做主键关联