为什么在元组关系演算中需要量词?
假设我有这样的语句:
{年代。学生中存在S,年级中存在G。s# = G.s#)};
为什么我不能用这个代替呢?
{年代。sname | S in Student and G in Grade and S.s# = G.s#};
查询返回相同的值。但在第二个例子中,你也可以问学生的G.grade
,而在第一个例子中,你不能问。Tuple Relational Calculus表达式的右侧描述了一组元组,其中只保留了左侧的属性。这里,右边的两个表达式描述了不同的元组集合,但是左边的投影恰好留下了相同的值。
r IN R AND EXISTS s IN S (
etc
)
r IN R AND s IN S AND
etc
是第一种描述的关系只具有R
的属性,而第二种描述的关系具有R
的属性;S
.
假设任何具有属性...
的关系T
包含某个表达式T(...)
包含的行。则<...> IN T
当且仅当T(...)
那么我们可以将上面的两个关系描述为(分别)满足
的元组R(...) AND EXISTS
attributes in S & etc but not in R
(S(...) AND
etc
)
R(...) AND S(...) AND
etc
这种符号(或多或少)被称为域关系演算。
假设在关系上定义以下操作符:PROJECT
some attributes of T
T
保存EXISTS
other attributes of T
T(...)
的行T NATURAL JOIN U
保存T(...) AND U(...)
则可以将上述两个关系分别描述为
中的元组。R NATURAL JOIN PROJECT
attributes in S & etc also in R
(S NATURAL JOIN
etc
)
R NATURAL JOIN S NATURAL JOIN
etc
这种符号叫做关系代数。