- 设计省信息的表结构provinces
- id
- title
- proid
- 设计市信息的表结构citys
- id
- title
- proid
- 设计区县信息表结构areas
- id
- title
- proid
- title表示名称,proid表示所属上一级的id值,比如citys.proid 是对应所属省份的id,areas.proid对应的是所属城市的id值
问题:
能不能将三个表合成一张表呢?
思考:
观察三张表发现,表的结构都是一样的,存储的都是地区信息,而且每种信息的数据量有限
意义:
假如合成一张表,即可减少创建表的开销,也用不着多个表关联查询
答案:
定义表areas,结构如下
- id
- atitle
- pid
说明:
- 因为省没有所属的省份,所以可以填写为null
- 城市所属的省份pid,填写省所对应的编号id
- 区县所属的城市pid,填写城市所对应的编号id
- 这就是自关联,表中的某一列,关联了这个表中的另外一列,但是它们的业务逻辑含义是不一样的,城市信息的pid引用的是省信息的id
创建areas表的语句如下:
- 从sql文件中导入数据
- 查询一共有多少个省
- 例1:查询省的名称为“山西省”的所有城市
- 例2:查询市的名称为“广州市”的所有区县