咱们先了解下, 什么是自关联,
在多对一、一对多、多对多查询实际应用中可能会遇到这样的情况:多个表的内容在一个表里,
意义是: 存储的都是地区信息,而且每种信息的数据量有限,没必要增加一个新表,或者将来还要存储区、乡镇信息,都增加新表的开销太大。 放在一个表里,和多个表查询 性能差别也是很大的。
查询原理是: 物理是一个表,当作多个表进行查询, 并把表进行重命名。
咱们的应用场景为 树形结构 。 例如
当选择电脑的时候 会自动带过来 关于电脑的下级结构, 当选择电脑整机的时候 ,也会带出来 关于 电脑整机的信息。
如果这个不清楚, 我们可以拿 最常用的 例子 ,
设计 省 市 县 的关系 步骤如下:
1.设计省信息的表结构provinces
id
ptitle
2.设计市信息的表结构citys
id
ctitle
proid
citys表的proid表示城市所属的省,对应着provinces表的id值
3.问题:能不能将两个表合成一张表呢?
思考:观察两张表发现,citys表比provinces表多一个列proid,其它列的类型都是一样的, 也可以得出,两张表的字段极其相似才可以自关联。
4.通过上边的总结我们定义表areas,通用的结构如下
id
atitle
pid
因为省没有所属的省份,所以可以填写为null
城市所属的省份pid,填写省所对应的编号id
这就是自关联,表中的某一列,关联了这个表中的另外一列,但是它们的业务逻辑含义是不一样的,城市信息的pid引用的是省信息的id
在这个表中,结构不变,可以添加区县、乡镇街道、村社区等信息
- 创建areas 表 代码如下:
create table areas(
aid int primary key auto_increment not null,
atitle varchar(20),
pid int ,
foreign key(pid) references areas(aid)
) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
- 插入数据, 数据比较多,我们就用文件导入的方式
source areas.sql
文件的连接如下:
插入省市sql