元组关系演算:元组关系演算就是对元组的操作。
我们称类似 {t|Φ(t)} 这样的式子为元组演算表达式。元组演算表达式由原子公式和运算符组成。
一个元组演算表达式 {t|Φ(t)} 表示了使 Φ(t) 为真的元组集合。
原子公式:
R(t):
R 是关系名, t 是元组变量。 R(t) 表示 t 是 R 中的元组。则关系 R 可表示为: {t|R(t)}。
t[i] θ u[j]:
t 和 u 是元组变量, θ 是算术比较运算符。 t[i] θ u[j] 表示断言 “ 元组 t 的第 i 个分量与元组 u 的第 j 个分量满足比较关系 θ ” 。
如, t[2] < u[3] 表示元组 t 的第 2 个分量小于元组 u 的第 3 个分量。
t[i] θ c 或 c θ t[i]:
c 是常量,该公式表示 “t 的第 i 个分量与常量 C 满足比较关系 θ” 。
如, t[4]=3 表示元组 t 的第 4 个分量等于 3 。
自由元组变量和约束元组变量的概念:
若公式中的一个元组变量前有 “ 全称量词 ” 或 “ 存在量词 ” ,则称该变量为约束元组变量,否则称自由元组变量。
全称量词符号:“∀”,存在量词符号:“∃”。A就是all,倒过来作符号表示全称,E就是exist,反过来做符号表示存在。
各个运算符符号含义:
比较运算符:<、>、≤、≥、=、≠。
量词:∀、∃
否定词:¬
合取、析取、蕴含运算符:∧、∨、→。
元组演算公式中,各种运算符的优先次序为:
算术比较运算符最高;
量词次之,且 ∃ 的优先级高于 ∀ 的优先级;
逻辑运算符最低,且 ﹁ 的优先级高于 ∧ 的优先级, ∧ 的优先级高于 ∨ 的优先级;
加括号时,括号中运算符优先,同一括号内的运算符之优先级上述几项规则。
有限次地使用上述五条规则得到的公式是元组关系演算公式,其他公式不是元组关系演算公式。
关系操作有5种基本操作,它们在关系代数中分别对应5种基本运算,这5种基本运算可以用一阶谓词演算中的公式表示:
并:
R ∪ S={t|R(t) ∨ S(t)}
差:
R - S={t|R(t) ∧ ﹁ S(t)}
笛卡尔积:
R×S={t (n+m) |( ∃ u (n) )( ∃ v (m) )(R(u) ∧ S(v) ∧ t[1]=u[1] ∧ ... ∧ t[n]=u[n] ∧ t[n+1]=v[1] ∧ ... ∧ t[n+m]=v[m])}
注: t (n+m) 表示 t 有目数 (n+m)
投影:
π t1,t2,...,tk (R)={t (k) |( ∃ u )(R(u) ∧ t[1]=u[i1] ∧ ...t[k]=u[ik] )}
选择:
σ F (R)={t|R(t) ∧ F}
注: F是公式。F是用 t[i]代替运算对象i得到的等价公式。
域关系演算是关系演算中的另一种形式,是一元组变量的分量即域变量作为谓词变元的基本对象。
其原子公式有两种形式:
R(x1…xk),R是一个k元关系,每个xi是常量或域变量;
xθy,其中x,y是常量或域变量,但至少有一个是域变量,θ是算术比较符。
公式中可使用∧、∨、┐和=>等逻辑运算符,也可用(∃x)和(∀x)形成公式,但变量x是域变量,不是元组变量。
自由域变量、约束域变量等概念和元组演算中一样。
域演算表达式是形为{t1…tk∣P(t1,…,tk)}的表达式,其中P(t1,…,tk)是关于自由域变量t1,…,tk 的公式。
举例:
下图(a)、(b)、(c)是三个关系R、S、W,(d)、(e)、(f)分别表示下面三个域表达式的值。
R1={xyz|R(xyz)∧x<5∧y>3 }
R2={xyz|R(xyz)∨(S(xyz)∧y=4)}
R3={xyz|(∃u)(∃v)(R(zxu)∧W(yv)∧u>v)}
元组表达式到域表达式的转换规则:
对于k元的元组变量t,可引入k个域变量t1…tk,在公式中t用t1…tk替换,元组分量t[i]用ti替换。
对于每个量词(∃u)或("u),若u是m元的元组变量,则引入m个新的域变量u1…um。在量词的辖域内,u用u1…um替换,u[i]用ui替换,(∃u)用(∃u1)…(∃um)替换,(∀u)用(∀u1)…(∀um)替换。