APP下载

基于ALPHA语言的复杂查询SQL语句生成

2018-12-28

关键词:元组谓词全称

汪 洋

(安庆师范大学计算机与信息学院,安徽安庆246133)

SQL语言中没有全称量词和逻辑蕴含[1](本文将带有全称量词和逻辑蕴含的查询称为复杂查询),实践中,必须将复杂查询变换为等价的带有存在量词的谓词查询[2],这一过程对于数据库初学者是一个不小的挑战。作者在多年数据库教学实践的反思和探索下,借助谓词演算语言ALPHA将复杂查询进行等价变换,生成SQL语句,过程简单清晰,易为初学者所理解和掌握。

图1 基于ALPHA语言的复杂查询SQL语句生成框架

1 复杂查询SQL语句生成框架

本文提出的复杂查询的SQL语句生成框架如图1所示。

首先将复杂查询用ALPHA语言进行表示, 然后利用逻辑谓词等价变换理论,将ALPHA语句中的全称量词和逻辑蕴含进行等价变换,最后再使用ALPHA语言查询语句向SQL语句变换生成算法生成SQL语言查询。

2 复杂查询的谓词等价变换理论

2.1 全称谓词等价变换

SQL语言没有全称量词,只能把带有全称量词的谓词变换为等价的带有存在量词的谓词[3-4]。

(1)式语义解释:对于所有的x,P都成立等价于不存在一个x,P不成立。

2.2 逻辑蕴含谓词等价变换

SQL语言也没有逻辑蕴含谓词和运算,可以利用谓词演算将逻辑蕴含谓词进行等价变转:

(2)式语义解释:p则q等价于非p或q。

如果查询要求中既有全称量词,又有逻辑蕴含,则可进行下面的等价变换。

(3)式语义解释:对于所有的y,p则q,等价于不存在这样的y,p成立而q不成立。

3 复杂查询的ALPHA语言变换

关系演算以数理逻辑中的谓词演算为基础,分成元组关系演算和域关系演算两类,ALPHA语言是一种典型的元组关系演算语言,它以元组变量作为谓词变元[1]。本节以文献[1]第70页的数据库作为示例数据库,该数据库关系如图2所示,设计了2个例子,例1是带有全称量词的查询,而例2是既有全称量词又有逻辑蕴含的复杂查询。先阐述用元组关系演算ALPHA语言表示复杂查询要求,再利用谓词变换理论进行等价的谓词变换。

例1查询供应了全部零件的供应商姓名。首先用AHPHA语言将例1查询表示为:

然后,用(1)式将上述语句进行等价变换为:

图2 示例数据库关系图

(4)式语义解释为查询这样的供应商的姓名,不存在一种零件,该供应商没有供应该零件。

例2 查询至少供应了S1供应商所供应的全部零件的供应商代码。

先用AHPHA语言将例2查询表示为:

再用(3)式将上述语句进行等价变换:

(5)式语义解释:查询这样的供应商的代码,不存在一种零件,S1供应商供应了该零件,而该供应商没有供应这种零件。

4 基于ALPHA语言的复杂查询的SQL语句生成算法

Step 1:将变换后的ALPHA工作空间中的表达式表名.属性名转换为SELECT属性名FROM表名;

Step 2:将∃转换为WHERE EXISTS,¬∃转换为WHERENOTEXISTS;

Step 3:将元组变量转换为SELECT*FROM表名表别名(其中表名为定义元组变量的表名,表别名为元组变量名);

Step 4:∧转换为AND,∨转换为OR。

经过上述算法转换,例1的(4)式可转换为下面的SQL语句:

5 结束语

为解决数据库理论初学者编写复杂查询SQL语句的困难,作者在多年数据库教学实践研究中,探索出一个复杂查询的SQL语句生成方法,借助谓词演算语言ALPHA将复杂查询进行了等价变换,学习者只需按该方法进行简单的ALPHA语言符号向SQL语句的转换,即可生成复杂查询的SQL语句,该过程简单清晰,易为初学者理解和掌握。该方法在多年的教学实践中得到了检验,并取得了较好的教学效果。

猜你喜欢

元组谓词全称
2022年本刊可以直接使用的常用缩略语
2022年本刊可以直接使用的常用缩略语
2022年本刊可以直接使用的常用缩略语
Python核心语法
被遮蔽的逻辑谓词
——论胡好对逻辑谓词的误读
针对隐藏Web数据库的Skyline查询方法研究*
党项语谓词前缀的分裂式
康德哲学中实在谓词难题的解决
一种基于时间戳的简单表缩减算法∗
海量数据上有效的top-kSkyline查询算法*