元组关系演算的语义研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
元组关系演算的语义研究
王小兵
西安电子科技大学计算机学院,陕西西安 (710071)
E-mail:xbwang@
摘要:针对一些文献存在的问题,规范了特性谓词在元组关系演算中的表达形式,研究了完整性约束及空值对元组关系演算语义的影响,并通过实例加以说明。
关键词:元组关系演算,特性谓词,完整性约束,空值
中图分类号: TP311 文献标识码: A
1. 引言
20世纪60年代诞生的数据库技术,经过近半个世纪的发展,形成了坚实的理论基础、成熟的商业产品和广泛的应用领域。E.F Codd 提出的关系数据模型为当今主流的数据库管理系统提供了坚实的数学基础。关系数据模型有三种等价的操作语言:关系代数、SQL、关系演算,它们的非过程化程度依次递增,主要应用领域也不同。对于用户提出的查询要求,需要由专业人员书写SQL语句并执行得到结果。有一些复杂的查询,不易直接写出SQL语句,此时可求助于元组关系演算,大致过程为:先写出查询的元组关系演算表达式;再根据等价转化规则得到不含全称量词∀的元组关系演算表达式;最后将元组关系演算表达式转化为SQL语句。不过,元组关系演算的抽象性和非过程性,产生了一些问题[1] [2] [3] 。对于这些问题,笔者进行了深入细致的分析,希望有助于人们对元组关系演算的学习和使用。
2. 元组关系演算
元组关系演算是关系演算的一种,是以数理逻辑中的谓词演算为基础的。文献[2] 分析元组关系演算的运行机制,介绍了一种易于正确理解和设计元组关系演算表达式的方法,并通过实例揭示了它与SQL之间的密切联系。经过仔细分析,笔者发现有一些问题值得商榷。
下面以[2] 中“学生选修课程”这一数据库模式为例。该数据库模式包含三个基本表:S表示学生基本情况,结构为S(s# , sn , age, sex),各属性分别表示学号、学生姓名、年龄、性别;C表示课程基本情况,结构为C(c#, cn, tn),各属性分别表示课程编号、课程名称、任课教师姓名;SC表示学生选课情况,结构为SC(s#, c#, g),各属性分别表示学号、课程编号和成绩。
[2] 提出查询,要求检索Wang同学不学的课程的编号。在分析该查询的语义后,给出了三种不同的方案,分别用元组关系演算表达式(1)、(2)、(3)来表示。由于SQL只有与存在量词∃对应的EXISTS谓词,因而使用谓词逻辑中全称量词∀和存在量词∃之间的等价转化公式,分别得到不包含∀的元组演算表达式(4)、(5)、(6),最后以此为依据写出三种不同形式的SQL语句。
{t[c#]|C(t)∧w(SC(w)∧t[c#]≠w[c#]∨v(S(v)∧w[s#]=v[s#]∧v[sn]≠'Wang'))} (1) {t[c#]|C(t)∧w(SC(w)∧t[c#]≠w[c#]∨v(S(v)∧(v[sn]≠'Wang'∨w[s#]≠v[s#])))} (2)
{t[c#]|C(t)∧v(S(v)∧(v[sn]≠'Wang'∨w(SC(w)∧(w[s#]≠v[s#]∨t[c#]≠w[c#]))))} (3) {t[c#]|C(t)∧¬w(SC(w)∧t[c#]=w[c#]∧¬v(S(v)∧w[s#]=v[s#]∧v[sn]≠'Wang'))} (4)
{t[c#]|C(t)∧¬w(SC(w)∧t[c#]=w[c#]∧v(S(v)∧(v[sn]='Wang'∧[s#]=v[s#])))} (5) {t[c#]|C(t)∧¬v(S(v)∧(v[sn]='Wang'∧w(SC(w)∧(w[s#]=v[s#]∧t[c#]=w[c#]))))} (6)
通过仔细分析,发现式(1)(2)(3)存在一定的问题。在谓词逻辑中,全总个体域包含了所有个体变元的所有个体域,它统一了个体变元的取值范围,但不同论述对象需用不同的特性谓词加以再刻画[4] 。对于全称量词,特性谓词作为蕴涵式的前件加入;对于存在量词,特性谓词作为合取项加入。在元组关系演算表达式中,元组的限定条件即是特性谓词,书写时也必须遵循上述两条基本规则。遗憾的是,这两条规则往往被人们遗忘,在文献[1] [3] 中,也出现了对于全称量词,将限定条件作为合取项加入元组关系演算表达式的问题。因此,必须对式(1)(2)(3)按照规则加以修改,将式(1)中第二个∧,式(2)和(3)中第二个与第三个∧都换为→,可以证明修改后的表达式才分别与式(4)(5)(6)等价。正是由于对限定条件采用了不正确的表达形式,[2] 得出了式(2)(3)不能够使用数理逻辑的等价公式相互进行推导的错误结论。
进一步,根据[2] 中的说明,使用谓词逻辑的推理规则,很容易证明式(5)(6)等价,但与式(4)是不等价的。根据谓词逻辑的完备性:凡是在非形式的推理中成立的前提和结论之间的关系,形式可推演性都是能反映的[5] ,(4)与(5)(6)的语义肯定不相同,这表明了三种查询方案实质上表达了两种不同的语义。另一方面,根据式(5)(6)采用的分析方法:先表达出“Wang 同学要学的课程编号”,再否定掉课程的限定条件,表达出“Wang 同学不学的课程编号”,我们得知式(5)(6)表达了正确的语义。这样看来,式(4)的语义与正确语义不相符合,它应该是一个“错误”的元组演算表达式,然而事实并非如此。
实体完整性和参照完整性是关系模型必须满足的完整性约束条件。在“学生选修课程”这一数据库模式中,不考虑空值,必然存在下列事实:S 中不同学生的学号不相同;C 中不同课程的课程编号不相同;SC 中出现的学号和课程编号在S 与C 中一定有相对应的学生和课程。这些事实是蕴涵在关系模型中的,然而上述任意一个元组关系演算表达式都不可能体现这些语义。在对式(5)(6)进行等价推导时考虑实体完整性和参照完整性,一定可以得到式(4)。由此有结论:若“学生选修课程”数据库遵守实体完整性和参照完整性,式(5)(6)和式(4)的语义相同,否则不同。在下一节中将结合具体数据,通过执行相应的SQL 语句加以印证。
3. 例子
使用Adaptive Server Anywhere 8.0建立“学生选修课程”数据库,其中学生S 表,课程C 表和选修SC 表三个表的具体数据如下所示,注意在SC 表中存在一个在S 表中并不存在的学号02004,这违反了参照完整性。
式(4)对应的SQL 语句为:
SELECT c#
FROM C
WHERE NOT EXISTS s# c# G
02004 1 92
02003 2 90
02003 3 70s# sn age sex 02001 Li 21 m 02002 Liu 19 f 02003 Wang 18 f
c#Cn tn 1 Database Wang 2 Operating System Zhang 3 PASCAL Liu