元组关系的演算
(转自网络)
为了讨论方便,先允许关系的基数是无限的。然后再对这种情况下定义的演算作适当的修改,保证关系演算中的每一个公式表示的是有限关系。
在元组关系演算系统中,称
{t|Φ(t)}
为元组演算表达式。其中
t
是元组变量,
Φ(t)
为元组关系演算公式,简称公式。
它由原子公式和运算符组成。
原子公式有三类:
(1) R(t)
R 是关系名, t 是元组变量。 R(t) 表示 t 是 R 中的元组。于是,关系 R 可表示为: {t|R(t)}
(2) t[i] θ u[j]
t 和 u 是元组变量, θ 是算术比较运算符。 t[i] θ u[j] 表示断言 “ 元组 t 的第 i 个分量与元组 u 的第 j 个分量满足比较关系 θ ” 。例如, t[2] < u[3] 表示元组 t 的第 2 个分量小于元组 u 的第 3 个分量。
(3) t[i]
θ
c
或
c
θ
t[i]
这里
c
是常量,该公式表示
“t
的第
i
个分量与常量
C
满足比较关系
θ”
。例如:
t[4]=3
表示元组
t
的第
4
个分量等于
3
。
在关系演算中定义了 “ 自由元组变量 ” 和 “ 约束元组变量 ” 的概念。这些概念和谓词演算中的概念完全一样。若公式中的一个元组变量前有 “ 全称量词 ” 或 “ 存在量词 ” ,则称该变量为约束元组变量,否则称自由元组变量。
公式可以递归定义如下:
(l)
每个原子公式是公式。
(2)
如果
Φ
1
和
Φ
2
是公式,则
Φ
1
∧
Φ
2
、
Φ
1
∨
Φ
2
、
﹁
Φ1
也是公式。分别表示:
①
如果
Φ
1
和
Φ
2
同时为真。则
Φ
1
∧
Φ
2
才为真,否则为假;
②
如果
Φ
1
和
Φ
2
中一个或同时为真,则
Φ
1
∨
Φ
2
为真,仅
Φ
1
和
Φ
2
同时为假时,
Φ
1
∨
Φ
2
才为假;
③
如果
Φ
1
真,则
﹁
Φ
1
为假。
(3)
若
Φ
是公式,则
∃
t(Φ)
也是公式。其中符号
∃
是存在量词符号,
∃
t(Φ)
表示:
若有一个
t
使
Φ
为真,则
∃
t(Φ)
为真,否则
∃
t(Φ)
为假。
(4)
若
Φ
是公式,则
∀
t(
Φ
)
也是公式。其中符号
∀
是全称量词符号,
∀
t(
Φ
)
表示:
如果对所有
t
,都使
Φ
为真,则
∀
t(
Φ
)
必为真,否则
∀
t(
Φ
)
为假。
(5)
在元组演算公式中,各种运算符的优先次序为:
①
算术比较运算符最高;
②
量词次之,且
∃
的优先级高于
∀
的优先级;
③
逻辑运算符最低,且
﹁
的优先级高于
∧
的优先级,
∧
的优先级高于
∨
的优先级;
④
加括号时,括号中运算符优先,同一括号内的运算符之优先级遵循
①②③
各项。
(6)
有限次地使用上述五条规则得到的公式是元组关系演算公式,其他公式不是元组关系演算公式。
一个元组演算表达式
{t|Φ(t)}
表示了使
Φ(t)
为真的元组集合。
关系代数的运算均可以用关系演算表达式来表示
(
反之亦然
)
。下面用关系演算表达式来表示五种基本运算:
(1) 并
R ∪ S={t|R(t) ∨ S(t)}
(2) 差
R - S={t|R(t) ∧ ﹁ S(t)}
(3) 笛卡尔积
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)
(4) 投影
π t1,t2,...,tk (R)={t (k) |( ∃ u )(R(u) ∧ t[1]=u[i1] ∧ ...t[k]=u[ik] )}
(5) 选择
σ F (R)={t|R(t) ∧ F}
注: F 是公式。 F 用 t[i] 代替 运 算 对 象 i 得到的等价公式。
例
1
查询信息系
(IS
系
)
全体学生:
S
IS
={Student(t)
∧
t[5]='IS'}
例
2
查询年龄小于
20
岁的学生。
S
20
={Student(t)
∧
t[4]<20}
例
3
查询学生的姓名和所在系。
S={t
(2)
|(
∃
u)(Student(u)
∧
t[1]=u[2]
∧
t[2]=u[5])}
上面定义的关系演算允许出现无限关系。例如
{t|
﹁
R(t)}
表示所有不属于
R
的元组
(
元组的目数等于
R
的目数
)
。要求出这些可能的元组是做不到的,所以必须排除这类无意义的表达式。把不产生无限关系的表达式称为安全表达式,所采取的措施称为安全限制。安全限制通常是定义一个有限的符号集
dom(Φ)
,
dom(Φ)
一定包括出现在
Φ
以及中间结果和最后结果的关系中的所有符号
(
实际上是各列中值的汇集
)
。
dom(Φ)
不必是最小集。
当满足下列条件时,元组演算表达式
{t|Φ(t)}
是安全的:
(
1
)如果
t
使
Φ(t)
为真,则
t
的每个分量是
dom(Φ)
中的元素。
(
2
)对于
Φ
中每一个形如
(
∃
t)(W(u))
的子表达式,若
u
使
W(u)
为真,则
u
的每个分量是
dom(Φ)
中的元素。
(
3
)对于
Φ
中每一个形如
(
∀
t)(W(u))
的子表达式,若
u
使
W(u)
为假,则
u
的每个分量必属于
dom(Φ)
。换言之,若
u
某一分量不属于
dom(Φ)
,则
W(u)
为真。
例 4 设有关系 R 如图 2.8(a) , S={t| ﹁ R(t)} ,若不进行安全限制,则可能是一个无限关系。所以定义
dom(Φ)= π A (R) ∪ π B (R) ∪ π C (R)
={{a1,a2},{b1,b2},{c1,c2}}
则
S
是
dom(Φ)
中各域值中元素的笛卡儿积与
R
的差集。结果如图
2.8(b)
。注意,在做笛卡儿积时各个域中的元素不能搞混。
附:其他类型举例:
-----------------------------------------------------------------------------------------
1 、下列等式中恒等的是:
① π A1,A2 ( σ F (E))≡ σ F ( π A1,A2 (E))
② σ F (E 1 × E 2 )≡ σ F (E 1 ) ×σ F (E 2 )
③ σ F (E 1 -E 2 )≡ σ F (E 1 )- σ F (E 2 )
④ π A1,A2,B1,B2 (EE)≡ π A1,A2 (E) π B1,B2 (E)
① 当 F 包含 A1,A2 以外的限制 时 ,不恒等
② 当 F 包含大于 E1( 或 E2) 个数 的限制 时 ,不恒等
③ 恒等
④ 等式不可能成立,右 边没 有相同 属 性
2 、以下元 组 的意 义 :
{t|( ∃ u)((R(u) ∨ S(u)) ∧ ( ∀ v)(T(v)→( ∃ w)((R(w) ∨ S(w)) ∧ w[1]=u[1] ∧ w[2]=v[1] ∧ w[3]=v[2])) ∧ t[1]=u[1]}
据 说 是表示 R ∪ S ÷ T 的意思,但是我 实 在是看不 懂 。
3 、以下元 组 表 达 式 转换为关 系代 数 表 达 式
{t| ∃ u ∃ v(R(u) ∧ S(v) ∧ u[3]=v[1] ∧ u[4]=v[2] ∧ u[1]>v[3] ∧ t[1]=u[2])}
其中 R(A,B,C,D) S(C,D,E)
关 系代 数 表 达 式 为 : π B ( σ A>E (RS))
4 、把下列 关 系代 数 表 达 式 转换为 元 组 表 达 式
π 1,4 (RS)
其中 R(A,B,C) S(B,D)
元 组 演算表 达 式 为 : {t| ∃ u ∃ v(R(u) ∧ S(v) ∧ u[2]=v[1] ∧ t[1]=u[1] ∧ t[2]=v[2])}
5 、 关 系代 数 表 达 式 → 元 组 演算表 达 式
π 1,5,6 ( σ 1>5 (R×S)) -- 注意中 间 是乘法不是自然 连 接
其中 R(A,B,C) S(A,B,C)
{t| ∃ u ∃ v(R(u) ∧ S(v) ∧ u[1]>v[2] ∧ t[1]=u[1] ∧ t[2]=v[2] ∧ t[3]=v[3])}
6 、下列 查询 效率最高的一 组 是:
① E1= π A,D ( σ B<'2007' ∧ R.C=S.C ∧ E='80' (R × S))
② E2= π A,D ( σ R.C=S.C ( σ B<'2007' (R) ×σ E='80' (S)))
③ E3= π A,D ( σ B<'2007' (R) σ E='80' (S))
④ E4= π A,D ( σ B<'2007' ∧ E='80' (RS))
答案是 ③ ,很明 显 自然 连 接要 优 于笛卡尔 积 ,先 运 算再投影 优 于 先投影再 计 算