首页
Datalog
predicate
atom
Haifeng Xu
(hfxu@yzu.edu.cn)
This slide is based on Jeffrey D. Ullman's work, which can be download from his website.
基本概念
基本概念
逻辑查询语言 Datalog (database logic) 由 if-then 规则组成.
这些规则表示: 从某个关系的特定元组的组合可以推断出另一些元组必定满足另一关系, 或者满足查询的结果.
谓词和原子
关系在 Datalog 中由谓词(predicate)表示. 每个谓词拥有固定数目的参数, 一个谓词和它的参数一起被称为原子(atom).
原子的语法就像传统编程语言中函数调用的语法. 例如, $P(x_1,x_2,\ldots,x_n)$ 即是一个由谓词 $P$ 和参数 $x_1,x_2,\ldots,x_n$ 组成的原子.
实质上谓词就是一个返回布尔值的函数名. 如果 $R$ 是一个包含 $n$ 个固定顺序的属性的关系, 那么也可以用 $R$ 作为对应这个关系的谓词名.
原子(atom) 分为关系原子(relational atom)和算术原子(arithmetic atom)
- $P(x_1,x_2,\ldots,x_n)$ 是返回True或False的关系原子. 例如, 对于关系R, 若元组 $(a_1,a_2,\ldots,a_n)\in R$, 则 $R(a_1,a_2,\ldots,a_n)=True$. 否则此关系原子的值为 False.
- 算术原子是指两个算术表达式利用比较算符组合在一起的表达式, 如$x < y$, $x+1\geq y+4\times z$. 算术原子也返回True或False.
注意
- 谓词定义的关系是集合关系.
- 算术原子和关系原子都将出现在原子中的变量作为参数, 并且都返回一个布尔值.
Datalog 规则和查询
Datalog 规则和查询
与经典关系代数类似的操作在 Datalog 中称作规则(rule), 它包括
- 一个成为头部(head)的关系原子;
- 符号$\leftarrow$, 经常读作 if ;
- 主体(body)部分, 由一个或多个被称为子目标(subgoal)的原子组成. 这里原子可以是关系原子或算术原子. 子目标之间由 AND 连接, 任何子目标之前都可随意添加逻辑算子 NOT.
例子: Datalog 规则
下面的 Datalog 规则
LongMovie(t,y) $\leftarrow$ Movies(t,y,l,g,s,p) AND l $\geq$ 100
定义了“长”影片的集合, 该类影片时间长于 100 分钟. 它使用了具有如下模式的标准关系 movies:
Movies(title, year, length, genre, studioName, producerCNo)
这个规则等价于关系代数中的“赋值语句”:
LongMovie := $\pi_{title,year}(\sigma_{length\geq 100}(Movies))$
匿名变量
Datalog规则中的匿名变量
LongMovie(t,y) $\leftarrow$ Movies(t,y,l,g,s,p) AND l $\geq$ 100
其中变量 $g$, $s$, $p$ 只出现一次, 可以使用下划线代替. 这些变量称为
匿名变量.
LongMovie(t,y) $\leftarrow$ Movies(t,y,l,_,_,_) AND l $\geq$ 100
- 只有当一个变量出现不止一次时, 才需要关注其名字.
- 多个出现的 _ 代表不同的变量, 而不是同一个变量.
Datalog 中的查询
Datalog 中的查询
Datalog 中的查询(query) 是一个或多个规则的组合.
- 如果只有一个关系出现在规则头部, 那么这个关系的值就是查询的结果.
- 如果规则头部有不止一个关系, 那么这些关系中的一个是查询的结果, 其余的都是辅助定义查询结果.
- 当有多个谓词被规则集合定义时, 通常都指定 Answer 为查询结果名.
Datalog 规则的意义
Datalog 规则的意义
Datalog规则应用于包
Datalog规则应用于包
关系代数与Datalog
关系代数与Datalog
布尔操作
End
Thanks very much!
This slide is based on Jeffrey D. Ullman's work, which can be download from his website.