- Datalog 作为一种基于逻辑的数据查询语言,受到编程语
言Prolog 的启发,可以实现对数据库的演绎推理。即可以从数据库显示表示的事实中推理出未直接存入的
新数据或新信息,以构成内涵数据库。这些新数据或新信息实际上隐含在显示表示的外延数据库之中。
Datalog 与关系演算基于同一数学背景,即一阶逻辑。关系数据库的关系演算实际上可看成逻辑演算的一
种特例。不过,Datalog 允许递归,比关系演算表达能力更强,因而成为对关系模型的一种极自然的扩充,是
关系数据库管理系统中扩充演绎推理功能的一种重要的研究工具。 - Datalog 规则的描述
Datalog 中的运算通过规则表示。规则包括如下三部分:
(1) 头部(Head) :即一个关系原子。
(2) 符号“ ←”:表示“if”。
(3) 一个或多个子目标(Subgoal) :即包括一个或多个原子的体(Body) 。原子可能是关系的,也可能是算术的,都以常量或变量为参数。各子目标用AND连接,并且,子目标前有NOT的子目标称为求反子目标。 - 规则的含义描述为:检查规则变量的所有可能的取值,只有当这些变量具有使所有子目标为True 时,
它们在头部的取值才可以作为谓词头部关系中的结果元组。 - 当Datalog 规则运用于关系数据模型后,谓词有外延(Extensional) 谓词和内涵( Intensional) 谓词之分。
相应地,关系也有两种存在形式:一种以事实形式存在,称为外延数据库(EDB) ,另一种以规则形式存在,
称为内涵数据库( IDB) ,即通过一个或多个Datalog 规则计算而求得的数据库。如上例中,Student 是一个
EDB 关系,通过它的外延定义,谓词Student 同样是一个EDB 谓词。而关系Newstudent 和谓词Newstudent 都
是IDB 的。需要注意的是,EDB 谓词永远不能出现在规则的头部,但它可以出现在规则体中。而IDB 谓词则
可出现在规则的任何地方。 - 关系的Datalog 查询
Datalog 中的查询是一个或多个规则聚集。如果规则头部只有一个关系出现,那么,就认为该关系的值
是查询的答案。如果规则头部有多个关系,那么这些关系中的一个是查询的答案,而其它关系在答案定义
中起辅助作用。 - Datalog 规则对基本关系运算的表示
关系的几种基本运算可用Datalog 规则表示如下:
(1) 并
两个关系的并要用两个规则来构造。每个规则都是一个与其中一个关系相对应的原子作为它唯一的
子目标,并且,两个规则的头部都有相同的IDB 谓词。规则头部的参数和它的子目标中的参数完全相同。q
= r ∪s 的规则表示为:
Q( x1 , x2 , ⋯, xn) ← R ( x1 , x2 , ⋯, xn)
Q( x1 , x2 , ⋯, xn) ←S ( x1 , x2 , ⋯, xn)
(2) 差
两个关系的差用具有求反子目标的单一规则计算。规则头部的参数和它的子目标中的参数完全相同。
q = r - s 的规则表示为:
Q( x1 , x2 , ⋯, xn) ← R ( x1 , x2 , ⋯, xn) AND NOT S ( x1 , x2 , ⋯, xn)
(3) 积
两个关系的积可用一个规则表示。规则头部的参数包括两个子目标中的所有参数,并且参数的前后顺
序要一致。q = r ×s 的规则表示为:
Q( x1 , x2 , ⋯, xn , y1 , y2 , ⋯, ym) ← R ( x1 , x2 , ⋯, xn) AND S ( y1 , y2 , ⋯, yn)
(4) 选择
如果选择的条件都是与(AND) 操作,则用单一规则表示,而每一个条件作为一个算术子目标,并且用
AND 相连。例如:q =σx > 10 and y < 100 (r) 的规则表示为:
Q( x1 , x2 , ⋯, xn) ← R ( x1 , x2 , ⋯, xn) AND x > 10 AND y < 100
如果选择涉及到p 个条件的或(OR) 操作,则需要用p 条规则表示,其中每条规则都定义相同的头部谓
词。第i 条规则对p 个条件中的第i 个进行选择。例如:q =σx > 10 or y < 0 (r) 的规则表示为:
Q(x1 ,x2 , ⋯,xn) ←R(x1 ,x2 , ⋯,xn) AND x > 10
Q(x1 ,x2 , ⋯,xn) ←R(x1 ,x2 , ⋯,xn) AND y < 0//累加的效应
(5) 投影
关系的投影可以使用具有单一子目标的单一规则实现。头部的参数是按要求的顺序与投影的属性表
对应的变量。例如:q = πx1 ,x2 ,X3 (r) 的规则表示为:
Q( x1 , x2 , x3) ← R ( x1 , x2 , ⋯, xn)
(6) 其它关系运算的Datalog 规则
交:Q(x1 ,x2 , ⋯,xn) ←R(x1 ,x2 , ⋯,xn) AND S(x1 ,x2 , ⋯,xn) 表示q = r ∩s
自然连接:Q(a ,b ,c ,d) ←R(a ,b) AND S(b ,c ,d) 表示 q = r þ ü s - Datalog 规则对关系的多重查询
Datalog 规则不仅可以模拟关系代数的单一运算,实际上还可以模拟任何代数表达式。方法是检查关
系代数表达式对应的表达树,并为树的每个内部节点建立一个IDB 谓词。每个IDB 谓词对应的一个或几个
规则是把运算符用于树的相应节点所需要的。代表数据库中关系的叶子节点由相应的EDB 谓词表示,本
身是内部节点的关系也由相应的IDB 谓词表示。 - Datalog 规则对关系的递归查询
Datalog 规则不但可以实现关系代数的所有查询,而且可以表达关系代数不能表达的递归查询。
Datalog规则的递归性在于:允许一个或多个IDB关系通过体中使用相同关系的规则来定义。递归的结
果是规则所定义的最小关系元组(最小固定点) ,也就是使规则头部恰好等于规则体所隐含的内容。使用递
归的一个典型的例子是路径的查找问题。图3 是一个有向路径图,能找出所有路径或确定任意两点间是否
有路径的Datalog 规则如下:
(1) PATH(x ,y) ←LINK(x ,y)
(2) PATH(x ,y) ←PATH(x ,z) AND PATH(z ,y)
第(1) 个规则表明PATH 包含有两点间的直接连接的点对,共有如下7 对: (A ,B) 、(A ,E) 、(B ,C) 、(B ,
E) 、(E ,C) 、(E ,D) 和(C ,D) 。第(2) 个规则是递归规则,它表明:如果能从x 点到达y 点并且能从z 点到达y
点,那么就能从x 点到达y 点。运用这条递归规则,第一轮循环将得到由两段有向边构成路径的3 个点对:
(A ,C) 、(B ,D) 、(A ,D) ;下一轮循环组合这些两段有向边构成的路径和所有一段有向边构成的路径,但这
里没有产生新的点对。也就是说,递归规则的计算获得最小固定点。因此,关系PATH共包括10 条点与点之
间的路径。
datalog论文摘要
最新推荐文章于 2024-05-27 09:33:02 发布