谓词逻辑 PB7谓词逻辑演算功能分析

PB7谓词逻辑演算功能分析

PB7谓词逻辑演算功能分析 PB7谓词逻辑演算功能分析 淮阴工学院 张有东 摘要:本文介绍了PowerBuilder7.0中谓词逻辑演算功能,并举例分析了其 应用。

关键词:
SQL、嵌套选择、谓词演算 结构化查询语言SQL是一种介于关系代数与关系演算之间的关系数据库 语言,由于其通用性和功能强的特点,目前已成为关系数据库的标准语言。因此, 各数据库厂家纷纷推出各自支持的SQL软件或SQL的接口软件。但是,不同DBMS 中对标准SQL的支持程度不尽相同。从谓词逻辑功能上看,现有的微型机上的 DBMS一般均支持带有EXISTS(代表存在量词)和NOT EXISTS的相关查询,而 Sybase 公司的PowerBuilder7.0 ,还支持ANY、ALL等谓词和嵌套选择(nested select),而VFP、Access、Paradox等DBMS则不具备,这就使PB7的查询功能强 大而灵活,本文给合笔者所开发的教务管理系统,就PB7中SQL的谓词逻辑演算 的应用作一分析,本系统中的数据库包含有以下三个表:
⑴“学生”表ST(sno,sname,ssex,sage,sdept),相应属性含义分别为学号、姓 名、性别、年龄和所在系。

⑵“课程”表Course(cno,cname,cpno,ccredit),相应属性含义分别为课程号、 课程名、先修课名和学分。

⑶“学生选课”表SC(sno,cno,grade), 相应属性含义分别为学号、课程号和成 绩。

如查询条件为“所有选修了2号课程的学生成绩”的PB7的SQL语句如下:
SELECT "st"."sname" FROM "st" WHERE exists (SELECT "sc"."sno" FROM "sc"WHERE ("sc"."cno" = "2" ) AND ( "sc"."sno" = "st"."sno" ) );

其一般处理过程为:首先取外层查询中ST表的第一个元组,根据它与内 层查询相关的属性值处理内层查询,若内层WHERE子句返回值为真(即内层查 询结果非空),则取此元组放入结果表;
然后再检查ST表的下一个元组,如此 反复求值,直到ST表全部检查完毕为至。可见,这类查询的一个显著特点是内 层查询的查询条件依赖于外层父查询的某个属性值(上述语句中是依赖于ST表 中的sno值)。

同时,也正是由于带EXISTS量词的相关嵌套查询只关心内层查询是否有 返回值,并不需要具体值,因此这类查询的效率有时甚至是最高效的。而ANSI 公布的SQL92标准中却没有全称量词(For All)和蕴函(Implication)逻辑演算, PB7中也没有,解决的方法是利用谓词演算将一个带有全称量词的谓词或一个逻 辑蕴函的谓词转换为等价的带有存在量词的谓词,我们可很容易推导出如下的等 价公式(p、q表示条件):
(1)(∨x)p≡┐(зx(┐p)) (2)p q≡┐p∨q 这样,就可以通过谓词演算实现系统的含有全称量词和蕴含逻辑运算的查 询。

如查询条件为“至少选修了98001学生选修的全部课程的学生的学生号和 姓名”的实现过程如下:
设用p表示谓词“98001学生选修了课程y”。

用q表示谓词“学生x选修了课程y”。

用Cy表示“课程y”。

则上述查询可表示为:(∨Cy)(p→q) 该查询可以转换为如下等价形式:
(∨Cy)p→q≡┑ЭCy(┑(p→q))≡┐ЭCy(┒(┒p∨q))≡┒ЭCy(p∧┐q) 它所表示的语义可解释为:不存在这样的课程y,98001学生选修了y,而学生x没有选,用PB7的SQL可表示如下:
SELECT DISTINCT "sc"."sno" FROM "sc", "scx" WHERE ( "sc"."sno" = "scx"."sno" ) and ((not exists ( SELECT DISTINCT "sc"."sno" FROM "sc", "scx" WHERE ( "sc"."sno" = "scx"."sno" ) and ((“scy”. “sno”=’95002’)AND FROM "sc", "scy" WHERE ( "sc"."sno" = "scy"."sno" ) and ( ( "scy"."sno" = "95002" ) AND ( not exists ( SELECT "sc"."sno" FROM "sc", "scz" WHERE ( "sc"."sno" = "scz"."sno" ) and ( ( "scz"."sno" = "scx"."sno" ) AND ("scz"."cno" = "scy"."cno" ))))))))