数据库手把手解题——2.如何画语法树及优化

前言:本篇主要讲解怎么画查询语法树并对其优化,因为我在之前学的时候,在网上其实没怎么找到详细地教程,还是自己一点一点扣书扣出来的,所以想写一篇具体来描述一下这类题的方法技巧。

如题,这是东华大学一年的考研题目:

我们来解决第二问的前提是先写出它的关系表达式:

这一步没什么技巧,学过关系代数就很简单,我们主要讲解如何画查询语法树:

第一步:转化关系表达式:就是将原来的三个表的自然连接转成笛卡尔积形式,在中间再加一个投影和选择即可;L就是指笛卡尔积里的所有属性,选择就是将这三个表连接起来的相同的属性,也比较简单,对照写出来即可;

第二步:画出原始的优化树,这个画出来很简单,就是把刚刚转化的关系表达式化成这样的形式:

最重要的第三步!优化!书上写的原则有很多,但其实只要记住该在哪投影,哪选择即可:

我先把图贴出来:

首先先看最上边,就是先写一个投影一个选择,投影投的就是咱们最后要的什么,选择就是右子树和左子树最后的连接,我们看右子树是Bike,那上面的选择操作一定就是

这样我们上面的树就写好了。

然后我们来到右子树,如果我们的条件是有在Bike里体现的,那一定就是加上Π和,如果我们没有这方面的条件,那就只加一个Π就行,而很明显,在Bike里我们是有条件的,所以就搞成:

这样即可,就是我要用Bname来筛选出来,但我最后只要Bid就行了;下面的都是这个意思:

这也是同理,我们要清楚的就是,条件是什么,我最后要什么就够了,这就是优化过程;

要注意一点的是这一点:

这一步要判断好,这一步输出的可就直接给上边的树了,要确认好上面的树需要什么;

然后就结束啦!其实很简单的,主要是分清条件是什么,每一步只需要什么。

猜你喜欢

转载自blog.csdn.net/dyyay521/article/details/111987032
今日推荐