全书目录

第十八篇:MySQL 完全指南 —— 城市户籍总账宇宙

第五章:关系模型 —— 户、人与街区之间到底怎么挂钩

1 分钟 253 字 第 340 / 962 个阅读单元

关系型数据库的核心不是“有很多表”,而是:

这些表之间有清晰关系。

在“城市户籍总账”里,最自然的关系是:

text
districts  1 ---- n  households  1 ---- n  citizens

也就是:

  • 一个行政区下有很多户
  • 一个户下有很多市民
  • 一个市民属于一个户

ASCII 关系图:

text
[districts]
  district_id (PK)
  district_name
        │ 1
        │
        └──── n
             [households]
               household_id (PK)
               district_id (FK)
               household_no
               address
                    │ 1
                    │
                    └──── n
                         [citizens]
                           citizen_id (PK)
                           household_id (FK)
                           national_id (UNIQUE)
                           full_name

再扩展一下关系模型的几种常见形态:

1. 一对一

text
citizens 1 --- 1 citizen_profiles

适合把低频、扩展字段拆出去。

2. 一对多

text
households 1 --- n citizens

这是最常见的主从关系。

3. 多对多

例如一个市民可以参加多个社区项目,一个项目也可以有多个市民参加。不能直接硬连,应该加中间表:

text
citizens n --- n community_programs
            │
            ▼
      citizen_programs

关系模型的本质是:

别把所有信息揉成一张巨表,而是把“实体”与“关系”拆清楚。