数据库Mysql_面试题目__高级知识_自关联理解并创建

咱们先了解下, 什么是自关联,
在多对一、一对多、多对多查询实际应用中可能会遇到这样的情况:多个表的内容在一个表里,
意义是: 存储的都是地区信息,而且每种信息的数据量有限,没必要增加一个新表,或者将来还要存储区、乡镇信息,都增加新表的开销太大。 放在一个表里,和多个表查询 性能差别也是很大的。

查询原理是: 物理是一个表,当作多个表进行查询, 并把表进行重命名。

咱们的应用场景为 树形结构 。 例如 自关联的应用场景
当选择电脑的时候 会自动带过来 关于电脑的下级结构, 当选择电脑整机的时候 ,也会带出来 关于 电脑整机的信息。

如果这个不清楚, 我们可以拿 最常用的 例子 ,
设计 省 市 县 的关系 步骤如下:
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
在这个表中,结构不变,可以添加区县、乡镇街道、村社区等信息

  1. 创建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 ;
  1. 插入数据, 数据比较多,我们就用文件导入的方式
source  areas.sql 

文件的连接如下:
插入省市sql

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值