文档章节

微课程 | 第九课《ER 表实现方法 1》

爱可生
 爱可生
发布于 2019/12/16 17:00
字数 823
阅读 48
收藏 0

https://v.youku.com/v_show/id_XNDQ3MTAzOTM2OA==.html

上一期我们介绍了全局表的使用方法,下面我们来介绍一下 ER 表及在 DBLE 中实现的方法。

ER 表

ER 表是一个什么样的概念,我们可以看一下上图的右边。sales 和 sales_detail 这两个表其实就有逻辑外键关系的两张表。有外键关系的表可以用外键来拆分,或者是依赖于外键节点。比如某个列 A 和外键列关系是 1: N,外键可以唯一决定它路由的归属。中间件可以通过某个列 A 拆分以后,在另一张表按照对应列进行拆分,因为它有外键关系,在业务当中也会通过外键关系来关联,并且去查我实际的数据也可以通过整体下发来避免二次查询来确定路由。

我们举个例子。看上图的配置部分,就是一个典型的 ER 表的一个配置。我们可以看到有 parent 有 child,child 可以继续有 child,理论上是可以无限拆下去,实际上我们不建议大家超过三层。我们来看前两行,第一行是我们最普通的一种拆分方式。第二行 childTable,有一个 joinKey,代表它自己的列和它的父亲列产生关系的那一列。parent key 是它父亲的那一列。换句话说也就是这张表的 child1_id 和 tb_parent 表的 id 是一个外键关系。我们知道这样一个关系以后,相关的查询就可以直接下发了。

实现方法 1

我们来看一个例子。

https://v.youku.com/v_show/id_XNDQ3MTA1MTE2OA==.html

通过  ‘select * from tb_parent’  查看表中的数据情况。预先插入了几条测试数据,两个表数据基本上一致。我们主要关心的是否有正确结果。通过两个表 JOIN 去观察一下结果,再观察一下是怎么去下发的。EXPLAIN 语句再加 \G。我们来看一下查询计划,结果一共是四行,两个 SQL 整体下发以后,再把结果简单合并一下,这是关联键的执行计划。如果我换 id 作为 JOIN 列,不是刚刚的列。就会又回到我们跨库查询的方式,JOIN 还是需要一个中间件内部计算 on 条件的结果。我们可以看到先是 order by 然后在合并,最后通过中间件去做 JOIN。

结论

所以使用 ER 表的结论是,只有你设置的外键关系符合你的业务逻辑,他才会进行优化,将SQL整体下发。大家在使用的时候要分析业务是不是能符合这种情况。 好,我们今天先介绍到这里。

图文稿为了方便阅读,在不影响学习的情况下优化了一些口语化词汇,文稿与视频会尽量保持一致。

© 著作权归作者所有

爱可生

爱可生

粉丝 14
博文 219
码字总数 385785
作品 1
徐汇
私信 提问
加载中

评论(0)

Web应用系统开发课程(Jsp程序设计)资源列表

Web应用系统开发课程教学资源一览表 说明:本课程每周8节(2次课),共计72学时完成网上商城开发 jsp第一次课内容:搭建开发环境、环境测试、项目需求分析 http://dyzyxy.blog.51cto.com/944...

dyzyxy
2015/04/16
0
0
免费公开课 | 一步步 TensorFlow 项目实战

本课程主要是按照 TensorFlow Machine Learning 这本书进行教学,网上也有开源的代码,需要可以帮助大家更好的学习。如果你想加入交流群,也可以添加小助手微信号:862251340,加入交流群,一...

chen_h
2017/12/11
0
0
第一期 | 人工智能面试题

当我们面试人工智能技术岗位的时候,会遇到各种奇葩的问题。从今天开始,微信公众号 coderpai 打算维护一个人工智能面试题,周一到周五都会发布一个面试题目,或者说是一个有关人工智能的技术...

chen_h
2017/12/12
0
0
Spark MLlib 机器学习算法与源码解析(网络课程—第一期)

《Spark MLlib 机器学习算法与源码解析》 spark是一个开源集群运算框架,最初是由加州大学柏克利分校AMPLab所开发。Spark使用了内存内运算技术,在内存上的运算速度比Hadoop MapReduce的运算...

sunbow0
2016/05/11
0
0
教学考核系统

开发一个网上教学和考试系统。该系统主要应用于机房教学与测试,同时可在学校局域网内任一客户电脑(含教室一体机)上使用,实现从出题、组卷、印刷、试卷分发、答题、收卷、判卷、公布成绩、...

pengboli
2017/06/12
60
6

没有更多内容

加载失败,请刷新页面

加载更多

Spring基础

主要用于service层; 轻量级java开发框架; 各层 web层:struts,spring-MVC service层:spring dao层:hibernate,mybatis , jdbcTemplate --> spring-data Spring核心:控制反转IOC 切面编...

七宝1
27分钟前
30
0
解决overflow+border-radius+transform圆角问题

网上还有其他版本,但是对我来说都不好使,下面是我在Chrome上的代码。overflow:hidden依然是不能正常使用,换成unset就可以,读者如果有更好的解决方案,请留言,谢谢。 <figure> <img...

hi懒喵
32分钟前
53
0
《C语言》—— 数组

书籍使我变成了一个幸福的人,使我的生活变成轻松而舒适的诗。——高尔基 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues。 https://github.com/midou-tech/articles 点关注,不迷路!...

龙跃十二
45分钟前
84
0
Java小案例: 1000以内的水仙花数

要求在控制台分别展示1000以内的水仙花数。 如下:↓ 水仙花数规则: 水仙花数至少是一个3位数 每位数字的立方数的累加和,正好等于该数字本身。 例如:153就是一个水仙花数。每位数字分别...

漫路h
昨天
66
0
centos 防火墙端口设置

查看开放的端口号 firewall-cmd --lists-all 设置开放的端口号 firewall-cmd --add-service=http --permanent 1. //--permanent表示永久生效,不加这个参数的话只会针对本次执行完命令生效,重...

ACE_LCX
昨天
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部