数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 1页第 8章 Datalog语言本章概述本章的学习目标主要内容数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 2页本章概述
关系代数是关系型数据库的理论基础,是数据库产品应用和发展的坚实基础。随着数据技术的不断提高,关系代数也暴露出了一些局限性,例如,无法有效地表示递归运算、
逻辑表达能力弱等。在这种情况下,Datalog语言应运而生。
Datalog语言是一种基于逻辑编程语言 Prolog的一种非过程化的语言。就像使用关系演算一样,用户只需要给出所描述的信息,不需要给出获取信息的具体过程。 Datalog
语言使用声明的方式定义,简化了简单查询的书写,使查询优化更容易进行。
本章将要全面介绍 Datalog语言的基本结构、规则、递归编程以及从关系代数到 Datalog语言的转换等内容。
数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 3页本章的学习目标
了解 Datalog语言的基本概念;
掌握 Datalog语言的基本结构;
掌握 Datalog语言的基本规则;
掌握从关系代数到 Datalog语言的转换过程;
认识和掌握 Datalog语言的递归编程原理;
理解包的概念和其在关系代数和 Datalog语言中的作用。
数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 4页主要内容
8.1 基本概念
8.2 关系代数向 Datalog规则的转换
8.3 递归原理
8.4 包的运算
8.5 本章小结数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 5页
8.1 基本概念
逻辑也是一种表示关系查询的方法,例如
Datalog语言就可以表示相同类型的查询。
Datalog语言不是使用过程语言来表示查询,
而是使用一种规则来表示出这种想法,即可以通过已知的关系中的某些元组的组合推测某个其他元组是否在某个其他关系中。
数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 6页基本结构
Datalog语言包括了两种基本的原子,即关系原子和算术原子。 Datalog语言是由这些原子按照一定的规则组成的。
在 Datalog语言中,关系通过称为谓词的符号来表示,每一个谓词都有固定数量的参数。关系原子是由符号谓词和其后的参数组成,关系原子也经常简称原子。
算术原子是两个算术表达式的比较。算术原子的值也是布尔值。
数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 7页一般规则
在前面讲述的关系代数中,介绍了许多关系代数运算,例如集合、笛卡尔乘积、自然连接等。这些运算形式在 Datalog语言中可以使用规则来描述。规则就是 Datalog语言中描述各种原子元素关联的规范,包括下列三个组成部分:
1,一个称为头部的关系原子,其后是
2,左向箭头符号 ←,读作 if,其后是
3,多个子目标组成的规则体。这些子目标既可以是关系原子,也可以是算术原子。各个子目标之间用逻辑运算符 AND连接,且各个子目标前面可以有选择地增加取反逻辑运算符 NOT。
数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 8页安全规则
前面讲过,Datalog语言是一种由许多原子构成的规则,规则包含了许多变量。规则的目标是使规则的头部关系原子为真。由于关系实例总是有限,所以还需要由规则保证得到的头部关系也都是有限的。如果得到的头部关系是无限的,那么这种规则是无意义的。
我们来分析一下,如何保证得到的查询结果是有意义的。在子目标中,包括了关系子目标、求反关系子目标、算术子目标和求反算术子目标。
数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 9页外延谓词和内涵谓词
外延谓词和内涵谓词是两个经常提到的概念。当谓词所指的关系存储在数据库中时,称该谓词为外延谓词。当谓词所指的关系是通过一个或多个 Datalog规则计算得到的,
那么称该谓词是内涵谓词。外延谓词和内涵谓词之间的差别类似关系代数表达式的运算项和使用关系代数表达式计算的关系之间的差别。
在 Datalog规则中,如果谓词分别是内涵的或外延的,那么可以引用与内涵的或外延的谓词相对应的关系。有时,
我们使用 IDB(Internal Database,内涵数据库 )来引用内涵谓词或相应的关系,使用 EDB(External Database,外延数据库 )来引用外延谓词或相应的关系。
数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 10页主要内容
8.1 基本概念
8.2 关系代数向 Datalog规则的转换
8.3 递归原理
8.4 包的运算
8.5 本章小结数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 11页
8.2 关系代数向 Datalog规则的转换
上一章介绍了关系代数的各种运算形式,
本节将介绍各种 Datalog规则形式。一般地,
可以使用一个或多个 Datalog规则来模拟关系代数的运算形式,并且可以模拟非常复杂的运算形式。
这里,主要研究如何从关系代数的基本运算形式以及连接运算形式转换到 Datalog规则。
数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 12页从集合运算到 Datalog规则
集合运算是关系代数的最基本的运算形式,包括了交集、并集和差集三种运算形式。下面介绍如何使用 Datalog规则模拟这三种集合运算形式。
交集运算可以使用一个 Datalog规则来表示。由于交集运算涉及了两个关系,那么在 Datalog规则中,具有与两个关系对应的子目标。在规则中,相应的参数使用相同的变量。
并集运算可以使用两个规则来表示。在 Datalog规则中,每一个规则都对应着一个并集运算中的关系,且两个规则的头部都有相同的 IDB
谓词。头部的参数与各个子目标中的参数完全相同。
差集运算可以使用具有求反子目标的一个规则来计算。也就是说,如果计算两个关系 U和 V的差集,那么可以这样来计算,非求反子目标是谓词 U,求反子目标是谓词 V。在该规则中,子目标和头部对于相应的参数都有相同的变量。
数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 13页从投影运算到 Datalog规则
把关系代数中的投影运算形式转换成
Datalog规则,可以使用一个具有单一子目标的规则。该子目标的参数是数量不同于关系的属性数量的变量,每一个变量都对应着关系的一个属性。头部是带有参数的原子,这些参数是按照要求的顺序与投影的属性表对应的变量。头部原子的这些变量只是子目标投影过来的变量,因此两者的数量不同。
数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 14页从笛卡尔乘积到 Datalog规则
两个关系 U和 V的笛卡尔乘积 U× V可以使用单一的 Datalog规则来表示。在这个 Datalog规则中,
有两个子目标。一个子目标对应关系 U,另一个子目标对应关系 V。每一个子目标都有不同的变量,每一个变量对应着关系 U或 V中的一个属性。
头部的关系原子把出现的两个子目标中的所有变量作为参数,且严格按照出现的先后顺序,即出现在关系 U子目标中的变量排列在关系 V子目标的变量之前。
数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 15页从选择运算到 Datalog规则
把关系运算中的选择转换成 Datalog规则是比较复杂的。
我们首先研究一种简单的情况,然后再研究如何把具有复杂条件的选择运算转变成 Datalog规则。
如果选择条件是一个算术比较表达式或多个比较表达式的
AND运算,那么可以建立一个具有下列子目标的 Datalog
规则:
一个关系子目标对应于将其进行选择的关系。该关系子目标的每一个分量都有不同的变量,且每一个分量都对应关系的一个属性;
多个算术子目标,每一个算术子目标都对应着选择条件的一个比较运算。虽然在选择条件中使用属性名,但是在算术子目标中却使用相应的变量,并且与关系子目标中建立的变量保持一致。
数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 16页从连接运算到 Datalog规则
连接包括了自然连接,θ连接和外部连接。这里主要介绍如何把自然连接和 θ连接转变成 Datalog规则。
连接运算非常类似于笛卡尔乘积的运算,因此可以使用像乘积的规则来表示两个关系的自然连接,差别是如果希望表示关系 U和 V的自然连接 UV,并且这两个关系中有相同名称的属性,那么必须使用相同的变量,否则必须使用不同的变量。规则头部是每一个变量都出现一次的 IDB谓词。
θ连接可以使用带选择的笛卡尔乘积来表示。如果选择条件是合取式,即比较运算通过 AND逻辑运算符连接起来,
那么可以使用乘积对应的 Datalog规则和附加的算术子目标,且每一个算术子目标对应着一个比较运算来表示。
数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 17页从多重运算到 Datalog规则
关系代数中的单一运算形式可以使用
Datalog规则表示,而且多重运算也可以使用 Datalog规则模拟。模拟多重运算的步骤如下:
第一步,绘制关系代数的表达树。其中,
表达树就是使用树状结构表示关系代数表达式的计算程序。
第二步,为表达树的每一个内部节点建立一个 IDB谓词。
数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 18页主要内容
8.1 基本概念
8.2 关系代数向 Datalog规则的转换
8.3 递归原理
8.4 包的运算
8.5 本章小结数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 19页
8.3 递归原理
递归是一种常见的算法,即如果一个过程直接或间接地调用它自身,那么称该过程为递归过程。
本节将要研究为什么和如何使用 Datalog语言描述递归过程。
数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 20页关系代数存在的问题
在数据的查询过程中,经常会遇到递归现象。例如,在出版社的人事管理中,经理和雇员的问题就是一个递归问题。一个人可以是某些雇员的经理,但是他又可能是另外一个经理的雇员,经理又可能是更高层经理的雇员,等等。
数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 21页计算最小固定点
我们现在研究如何在关系代数中解决这种问题。
假设关系 Leader(a,b)表示了这种直接和间接经理和雇员的联系。我们可以写出这样的方程,这是一个包含了关系 Leader和
Human的方程式,Leader的值是满足该方程式的最小关系,最小关系也称为最小固定点。
数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 22页使用 Datalog规则表示固定点公式
通过上面的分析可以看到,使用关系代数表示固定点公式往往会非常复杂,但是使用 Datalog规则表示则比较容易。下面我们研究如何使用
Datalog规则表示固定点公式。
使用 Datalog规则表示固定点公式的思路是:假定一个或多个 EDB关系已知,其他 IDB关系则通过出现在规则的头部来定义,规则体可能包含的谓词是 EDB或 IDB的关系以及代数原子子目标。
数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 23页主要内容
8.1 基本概念
8.2 关系代数向 Datalog规则的转换
8.3 递归原理
8.4 包的运算
8.5 本章小结数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 24页
8.4 包的运算
前面我们已经讲过,关系中的元组是集合,
这是一种自然的断言。但是,实际上,在许多数据库产品中,允许相同的元组在关系中重复出现。这时,关系中的元组不是集合,而是包。
因此,我们不但需要理解集合的各种运算,
还需要了解包是如何运算的。
数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 25页包的意义
我们反复强调了集合、列表和包的概念。集合中不允许元组重复出现,元组的顺序不重要。列表不但不允许元组重复出现,而且元组的出现顺序也是列表的重要特性。
相对而言,包的要求比较宽松,它既允许元组重复出现,
又不重视元组的出现顺序。
图 8-9就是一个包的示例。
数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 26页包的关系运算
关系的基本运算包括并集、交集、差集、
投影、笛卡尔乘积、选择等形式,我们现在研究如何对包进行这些运算。
数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 27页包的逻辑运算
包的运算不仅可以用于关系代数,而且也可以用于 Datalog规则。也就是说,如果没有求反的关系子目标,那么包的投影、选择、乘积、连接等运算形式可以同样应用于 Datalog规则。
当把包的运算应用于 Datalog规则时,其运算步骤如下:
第一步,对不同子目标对应的关系进行包连接运算;
第二步,按照算术子目标包含的内容,对连接运算的结果进行包选择运算;
第三步,把选择结果按照规则头部的关系进行包投影运算。
数据库系统原理与应用教程 (第二版 ) 第 1章 概述 第 28页主要内容
8.1 基本概念
8.2 关系代数向 Datalog规则的转换
8.3 递归原理
8.4 包的运算
8.5 本章小结