第六章全局查询到段查询的变换.docx
- 文档编号:3307112
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:25
- 大小:117.03KB
第六章全局查询到段查询的变换.docx
《第六章全局查询到段查询的变换.docx》由会员分享,可在线阅读,更多相关《第六章全局查询到段查询的变换.docx(25页珍藏版)》请在冰豆网上搜索。
第六章全局查询到段查询的变换
第六章全局查询到段查询的变换
一般说来,把对全局关系的查询(称为全局查询)变换为段的查询(称为段的查询),有几种不同的方法,采用某些规则就可把一个全局查询表达式重新写成一种等价的段查询表达式。
6.1查询的算符树及其等价变换
例:
S(学号,姓名,年令,性别,系号,奖学金,班长学号,民族)
C(课号,课名,学时,任课教师)
SC(学号,课号,成绩)
D(系号,系名,系主任)
查询:
学生‘刘建‘所学课号及成绩
SELECT课号,成绩
FROMS,SC
WHERES.学号=SC.学号ANDS.姓名=‘刘建‘;
以上是用SQL完成的查询(语义),在内部实现上,同一个语义可有多种不同方式。
对上面的查询,系统可用下面三种方式来实现:
T1=PJ课号,成绩(SLS.学号=SC.学号∧S.姓名=‘刘建‘(SCPSC))
T2=PJ课号,成绩(SL姓名=‘刘建‘(SNJNSC))
T3=PJ课号,成绩((SL姓名=‘刘建‘S)NJNSC)
分析上式,T1、T2、T3是等价的,但T3优于T2,T2优于T1。
怎样才能写出优化的表达式呢?
这就要相应有些准则。
引入查询的算符树的概念,并利用准则,通过对算符树进行等价变换达到优化目的。
6.1.1查询的算符树
Q1:
查询对北部地区的各个部门供货的供应商号。
图6.1是查询Q1的算符树的一个例子,其中树叶是全局关系,而每个节点表示了一个一元或二元的操作。
在本例中,先执行结合操作,再执行选择和投影操作。
图6.1查询Q1的一种算符树
我们可以把关系代数表达式的算符树看作是表达式本身的语法分析树,语法规则(产生式)。
R标识符
R(R)
RUN—OPR
RRBIN—OPR
UN—OPSLF∣PJA
BIN—OPCP∣UN∣DF∣JNF∣NJN∣IN∣SJF∣NSJ
上述的R可以是算符树的叶节点,运算符是枝节点,可通过对算符树进行等价变换达到优化目的。
6.1.2关系代数的等价变换
令U和B分别表示一元代数运算符和二元代数运算符,我们有:
●一元运算的交换律(commutativity):
U1U2RU2U1R
●二元运算的操作数的交换律
RBSSBR
●二元运算的结合律(associativity):
RB(SBT)(RBS)BT
●一远运算的幂等(idempotence):
URU1U2R
●一元运算相对于二元运算的分配律(distributivity):
U(RBS)U(R)BU(S)
●一元运算的因子分解(factorization),(这种变换正好与分配律相反):
U(R)BU(S)U(RBS)
下面讨论对于上述各条的具体可行的情况。
(见表6.1----表6.5)
表6.1一元运算的交换律
SLF2PJA2
SLF1(*(R))YY
*(SLF1(R))
PJA1(*(R))SNG1SNG2
*(PJA1(R))
SNG1:
Attr(F2)A1;SNG2:
A1A2
表6.2二元运算的结合律及操作数的交换律
UNDFCPJNFSJF
R*SYNYYN
S*R
(R*S)*TYNYSNG1N
R*(S*T)
SNG1:
for(RJNF1S)JNF2TRJNF1(SJNF2T):
Attr(F2)Attr(S)UAttr(T):
?
?
?
表6.3一元运算的幂等
PJA(R)PJA1PJA2(R)SNG:
AA1,AA2
SLF(R)SLF1SLF2(R)SNG:
F=F1F2
6.4、6.5见教材。
在非分布式数据库中,为了优化查询的执行,给出了一些相关的等价变换的一般准则:
准则1使用选择和投影的幂等来为每个操作数关系产生相应的选择和投影。
准则2把树中的选择和投影运算尽可能的向下推移。
图6.2查询Q1的修改后的算符树
(见教材80页)图6.2就是经过运用准则1和准则2变换之后的算符树。
6.2把全局查询变换成段查询
6.2.1段查询的规范表达式
段查询的规范表达式:
已知在全局模式上的一个代数表达式,只要对其中出现的每个全局关系名代入由段重构全局关系的代数表达式,就得到了规范表达式。
采用同样的方法可以把全局模式上的算符树映射成分段模式上的算符树。
(a)查询Q1的规范形式(用段重构代替全局关系名)(P83)
(b)把算符树中的选择和投影向下推移(准则2)
图6.3查询Q1算符树的进一步变换(P83)
6.2.2限定关系代数学
限定关系:
是一种带有限定语的关系,限定语确定了限定关系中所有元组的共同内涵特性,并表示为:
[R:
qR],这个整体为限定关系。
其中,R是一个关系,称为此限定关系的实体,qR是一谓语,称为此限定关系的限定语。
这里不要求对关系的元组求出关系的限定语的值,但若可求值,则其值必为真。
水平分段是限定关系的典型例子,限定语相应于分段谓语。
例如:
对于SUPPLIER1,可写成限定形式:
[SUPPLIER1:
CITY=“SF“]
对于DEPT1,可写成限定形式:
[DEPT1:
DEPTNUM<10]
这意味着SUPPLIER1中每一元组对于限定语CITY=“SF“均为真值。
DEPT1中每一元组对于限定语DEPTNUM<10均为真值。
CITY=“SF“是SUPPLIER1中所有元组的共同内涵特性。
同理,DEPTNUM<10是DEPT1中所有元组的共同内涵特性。
更值得注意的是导出式水平分段,各段的限定语涉及多个非同类关系中的属性。
例如:
SUPPLY1,可写成限定形式:
[SUPPLY1:
SNUM=SUPPLIER.SNUMANDSUPPLER.CITY=“SF“]
这里,仅局限于SUPPLY1而言,它的元组对限定语是不能求值的,但每个元组都有限定语所表达的共同内涵特性。
限定关系的代数学是关系代数的一种扩充,,其中使用限定关系作为操作数,这种代数除了对关系进行操作以外,还要对限定语进行操作。
限定关系代数学也有相应的运算规则,这些规则实际上是关系代数的推广。
其运算规则为:
规则1:
SLF[R:
qR][SLFR:
FANDqR]
证:
若元组t∈SLF[R:
qR],则t∈R,且t必使F为真,t也必须使qR为真。
∴SLF[R:
qR]的限定形式为:
[SLFR:
FANDqR]
例:
SUPPLIER1=SLCITY=“SF“(SUPPLIER)
则可知有限定关系:
[SUPPLIER1:
CITY=“SF“]
SLSNUM=20[SUPPLIER1:
CITY=“SF“]可写成
[SLSNUM=20SUPPLIER1:
SNUM=20ANDCITY=“SF“]
规则2:
PJA[R:
qR][PJAR:
qR]
A可以包含、也可以不包含限定语qR中的属性,但都不会影响PJAR的内涵特性,这可由限定关系的定义及其进一步说明加以解释。
例1:
PJDEPTNUM,NAME[DEPT1:
DEPTNUM≤10]
==>[PJDEPTNUM,NAMEDEPT1:
DEPTNUM≤10]
例2:
PJAREA,MGRNUM[DEPT1:
DEPTNUM≤10]
==>[PJAREA,MGRNUMDEPT1:
DEPTNUM≤10]
规则3:
[R:
qR]CP[S:
qS][RCPS:
qRANDqS]
注意:
这里是把两个限定语应用到RCPS的不相交属性上。
证:
令t1∈R,则t1具有内涵特性qR,
t2∈S,则t2具有内涵特性qS,
并由乘法定义知,元组
且它必具有内涵特性qRANDqS。
例:
S(学号,系,性别)S1=SL系=“计算机“(S)
[S1:
系=“计算机“]
C(课程,专业,学分)C1=SL专业=“软件与理论“(S)
[C1:
专业=“软件与理论“]
[S1:
系=“计算机“]CP[C1:
专业=“软件与理论“]
[S1CPC1:
系=“计算机“AND专业=“软件与理论“]
注意:
两限定语不相交的属性。
规则4:
[R:
qR]DF[S:
qS][RDFS:
qR]
∵(RDFS)R但(RDFS)S
∴有[RDFS:
qR]
注意事项:
RINS=RDF(RDFS)=SDF(SDFR)
即交集运算具有可交换性,即RINS=SINR
如果应用扩充代数学的定义,将会出现
[R:
qR]IN[S:
qS][R:
qR]DF([R:
qR]DF[S:
qS])
[R:
qR]DF[RDFS:
qR]
[RDF(RDFS):
qR]
[RINS:
qR]
(1)
而[S:
qS]IN[R:
qR][S:
qS]DF[S:
qS]DF[R:
qR]
[S:
qS]DF[SDFR:
qS]
[SDF(SDFR):
qS]
[SINR:
qS]
(2)
事实上,我们想得到的结果是:
[RINS:
qRANDqS]
证:
设t∈RINS,则t∈R且t∈S
∴t具有特性qR且具有特性qS。
规则5:
[R:
qR]UN[S:
qS][RUNS:
qRORqS]
这是显然的。
以上是把关系代数的五种基本运算推广到限定关系的运算中,下面是关系代数复合运算的推广。
规则6:
[R:
qR]JNF[S:
qS][RJNFS:
qRANDqSANDF]
证:
[R:
qR]JNF[S:
qS]
SLF([R:
qR]CP[S:
qS])
SLF([RCPS:
qRANDqS])
[SLF(RCPS):
(qRANDqS)ANDF]
[RJNFS:
qRANDqSANDF]
规则7:
[R:
qR]SJF[S:
qS][RSJFS:
qRANDqSANDF]
证:
[R:
qR]SJF[S:
qS]
PJATTR(R)([R:
qR]JNF[S:
qS])
PJATTR(R)[RJNFS:
qRANDqSANDF](由规则6)
[PJATTR(R)(RJNFS):
qRANDqSANDF](由规则2)
[RSJFS:
qRANDqSANDF](由半结合定义)
运用规则1,就可把图6.3(b)的最右分支剪掉,因DEPT3中没有北部地区。
关系代数表达式可以进行很多种有条件和无条件的等价变换,限定关系代数表达式也可进行同样的变换。
例:
SLCITY=“LA“[SUPPLIER1:
CITY=”SF“]
[SLCITY=“LA“SUPPLIER1:
CITY=”SF”ANDCITY=”LA”]ø(限定语为永假)
通过识别空关系的过程可大大简化查询树,
运用规则1,可把图6.3(b)最右分支剪掉,因DEPT3中没有北部地区。
针对限定关系的代数运算,可考虑如下几个优化的新准则:
准则3把选择向下推到树叶处,然后对它们使用限定关系的代数运算:
如果结果的限定语是永假式,则用空关系来代替此选择的结果。
准则4利用限定关系的代数运算来求结合的操作数的限定语之值;如果这个结合的结果的限定语是永假式,则用空关系来代替此子树(包括此结合及它的操作数在内)。
6.2.3水平分段关系的化简
例Q3:
查阅部门号为1的部门名、地区及经理号。
对全局关系DEPT进行操作:
SLDEPTNUM=1DEPT
现将这一全局查询变换到段查询(查询的规范化格式)
SLDEPTNUM=1SLDEPTNUM=1
UN[DEPT1:
DEPTNUM≤10]
[DEPT1:
[DEPT2[DEPT3
DEPTNUM≤10]10
(a)查询Q3的规范形式(b)查询Q3的化简
图6.5水平分段关系的化简
再如:
运用限定关系的运算规则1和优化准则3,可把图6.3(b)最右分支剪掉,因DEPT3可写成限定形式[DEPT3:
DEPTNUM>20],限定语表明DEPT3中的元组都是南部地区(没有北部地区)的部门,AREA=NORTH意味NOT(DEPTNUM>20)。
6.2.4水平分段关系之间结合的化简
分布结合的例子:
Q4:
查询至少有一个供应订单的供应商号和名:
SNUM,NAME。
Q4:
PJSNUM,NAME(SUPPLYNJNSUPPLIERE)
PJSNUM,NAME
NJNDEPTNUM=DEPTNUM
UNUN
[SUPPLY1:
SNUM=[SUPPLY2:
SNUM=[SUPPLIER1:
[SUPPLIER2:
SUPPLIER.SNUMANDSUPPLIER.SNUMANDCITY=”SP”]CITY=”LA”]
SUPPLIER.CITY=”SF”]SUPPLIER.CITY=”LA”]
(a)查询Q4的规范形式
准则5:
为了分布出现在全局查询中的结合,可以把并运算(代表段的收集)推向结合之上。
上述准则可用于简化水平分段关系与水平分段关系之间的结合。
UN
PJSNUM,NAMEPJSNUM,NAME
NJNNJN
[SUPPLY1:
SNUM=[SUPPLIER1:
[SUPPLY2:
SNUM=[SUPPLIER2:
CITY=”LA”]
SUPPLIER1.SNUMANDCITY=”SF”]SUPPLIER2.SNUMAND
SUPPLIER1.CITY=”SF”]SUPPLIER2.CITY=”SF”]
(b)查询Q4的分布式结合(运用准则5,把并运算推向结合之上)
图6.5水平分段关系之间结合的化简
这里已经剪掉了2个限定关系结合对子:
SUPPLY1NJNSUPPLIER2和SUPPLY2NJNSUPPLIER1
因为利用准则4,可知限定语为永假。
6.2.5采用推论方法(inference)进一步化简
已经看到,在对限定关系进行选择性查询或结合性查询时,利用准则3和准则4对限定语进行是否为永假式的判断是极为有用的,但有些情况确定一个公式是否为永假式并非可直接判断,可以采用更为复杂的内涵信息,并要求使用定理证明程序加以判断。
仍以Q1为例:
Q1:
查询对北部地区分公司供货的供应商号。
PJSNUMSLAREA=“NORTH“(SUPPLYJNDEPTNUM=DEPTNUMDEPT)
假设:
1.北部地区仅包含了部门1—10。
2.来自部门1—10的订单全部送给“SF“的供应商。
利用上面假设来推导哪些是永假,以便消除相应子表达式。
首先,由第1条有下面蕴涵式:
AREA=“NORTH“NOT(10 AREA=“NORTH“NOT(DEPTNUM>20) 利用准则3,把选择操作应用到段DEPT1,DEPT2,DEPT3,并求出结果的限定语的值,借助上面的蕴涵式,知其中两个段DEPT2、DEPT3为永假,可消去相应的子表达式,得到图6.6(a)所示的算符树。 PJSNUM JNDEPTNUM=DEPTNUM UNUN PJSNUM,DEPTNUMPJSNUM,DEPTNUMSLAREA=”NORTH” [SUPPLY1: SNUM=[SUPPLY2: SNUM=[DEPT1: SUPPLIER1.SNUMANDSUPPLIER2.SNUMAND1≤DEPTNUM<10] SUPPLIER1.CITY=”SF”]SUPPLIER2.CITY=”LA”] (a) PJSNUM JNDEPTNUM=DEPTNUM PJSNUM,.DEPTNUMPJDEPTNUM [SUPPLY1: SNUM=SLAREA=”NORTH” SUPPLIER1.SNUMAND SUPPLIER1.CITY=”SF”][DEPT1: 1≤DEPTNUM<10] (b) 图6.6采用推论方法进行算符树的化简 然后,利用准则5将合并运算上移至结合之上,再分配该结合: SUPPLY1与DEPT1结合,SUPPLY2与DEPT1结合,由假设1可知: AREA=“NORTH“DEPTNUM≤10 而由假设2可知: DEPTNUM≤10NOT(SNUM=SUPPLIER.SNUMAND SUPPLIER.CITY=”LA”) 通过运用准则4,可知SUPPLY2与DEPT1结合将为空。 于是得到图6.6(b)所示的算符树。 6.2.6垂直分段关系的化简 将垂直分段关系的查询表达式变化成规范表达式之后,一般都要用到结合操作(重构全局关系)。 希望寻找一个适当的子集就能足以回答问题,这样就可删除其余段,达到简化目的。 例: Q5: 列出雇员姓名及工资收入。 (见P47分段模式) PJNAME,SALEMP PJNAME,SAL JNEMPTNUM=EMPTNUM [EMP4: true]UNPJNAME,SAL [EMP4: true] [EMP1: [EMP2[EMP3 DEPTNUM≤10]10 (a)查询Q5的规范算符树(b)化简算符树图6.8垂直分段关系的化简 EMP被垂直地分成第一个段EMP4(描述雇员的工资管理)和第2个段,而第2个段又进一步水平地分片成EMP1,EMP2,EMP3。 由于EMP4的属性包含了NAME和SAL,所以仅用段EMP4就可回答该查询,并且可以通过剪掉结合的一个分支进而剪掉了结合及其下面的各段合并运算。 化简算符树如图6.8(b)所示。 由此可见: 垂直分段的运算规则可简化大多数查询,即把大多的查询局部于某个段内。 6.2.7半结合操作 半结合是关系代数的一种导出式运算,它在分布式查询中有着特殊的重要性。 有时将结合运算转换成半结合运算可使查询大大简化。 给定一“相等结合”RJNA=BS,这里A和B分别是R和S的属性(或更一般地说,是属性组),其半结合程序如下: SJNA=B(RSJA=BPJBS) 直观分析: 设R,S分布在 JNA=B不同站点上,将S投影到 B上,可将结果发送给R站 SJA=B点,再在R的站点上执行此 RPJB请求点半结合运算,再把半结合结果 S送到S站点,最后在S的站点执行结合操作 图6.8半结合程序的算符树 优点是: (1)S投影后数据量大大减少(只传有用的,淘汰无用的) (2)半结合后,R的元组中只有一个子集“存活”(只留有用的,淘汰无用的),而存活元组恰恰要与S结合。 例: S(学号,姓名,年令,性别,系号,奖学金,班长学号,民族) C(课号,课名,学时,任课教师) SC(学号,课号,成绩) D(系号,系名,系主任) 设表S、R分别在站点S和站点R上,请同学们分别写出请求: 列出少数民族学生的学号,姓名,性别,课号,成绩 PJ学号,姓名,性别,课号,成绩(SL民族<>“汉“(SNJNSC))发生在站点S和站点R上的含有半结合运算的关系代数表达式。 6.3分布式分组和聚集函数的求值 数据库应用往往需要执行不能用关系代数来表示的数据库访问操作,所以关系数据库的查询语言一般允许使用不能化简成关系代数表达式的查询式子。 这些附加特性中最重要的特性是能把元组分组成关系的不相交子集(水平或导出式水平分段),以及能通过对它们求聚集函数的值进而求出对全局关系的聚集函数的值。 聚集函数有: SUM(属性),AVG(属性),COUNT(*),MAX(属性),MIN(属性) 如求学习课号为C2课的学生总数。 SELECTCOUNT(*) FROMSC WHERE课号=“C2“; 求平均年龄 SELECTAVG(年龄) FROMS; 求最大年龄的学生的姓名、性别 SELECT姓名,性别,MAX(年龄) FROMS; Q6: 查询产品“P1“的平均订货量。 SELECTAVG(QUAN) FROMSUPPLY WHEREPNUM=“P1“; Q7: 查每一供应商所供应每种零件的总数量。 SELECTSNUM,PNUM,SUM(QUAN): TOTAL FROMSUPPLY GROUPBYSNUM,PNUM; Q8: 接Q7,但仅保留总和值大于300的那些组。 SELECTSNUM,PNUM,SUM(QUAN) FROMSUPPLY GROUPBYSNUM,PNUM HAVINGSUM(QUAN)>300; 聚集函数、分组功能都不能用关系代数来表达,需对关系代数进行扩充。 6.3.1关系代数的扩充 用group-byGBG,AFR操作来扩充关系代数。 用G表示某一属性集合,由此集合的值来决定R的分组。 用AF表示要对每个组求值的聚集函数。 GBG,AFR是一个关系,该关系的框架结构是由G的属性和AF的聚集函数组成,元组数目就是R按G值进行分组的数目,AF所决定的属性值就是对相应组求出的聚集函数的值(不分组,则默认为一个组)。 G或AF可以不指定。 利用上述操作可以用代数形式来书写Q6、Q7、Q8。 Q6: 求产品P1的平均订货量。 GBAVG(QUAN)SLPNUM=‘P1‘SUPPLY (G为空,作用于选择后的所有元组)。 Q7: 求每一供应商供应每种零件的总量 GBSNUM,PNUM,SUM(QUAN)SUPPLY Q8: 求由同一厂商供应的每种零件的总量达300以上的供应商号,零件号,总量。 SLSUM(QUAN)>300GBSNUM,PNUM,SUM(QUAN)TSUPPLY Q9: 求订单量达300以上的供应商号,零件号,订货量。 PJSNUM,PNUM,QUANSLQUAN≥300SUPPLY 请自己写出对于教学模型的相关询问。 6.3.2GROUPBY操作的特性 (1)分组操作的分布计算 首先考察GB相对于合并运算的分配率。 GBG,AF(R1UNR2)→(GBG,AFR1)UN(GBG,AFR2) 当且仅当: 对任意的i,j(i是被分组的下标,j是待合并运算的段的下标,Gi是第i个分组中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六 全局 查询 变换
![提示](https://static.bdocx.com/images/bang_tan.gif)