为什么元组关系演算中需要量词?

时间:2016-10-22 23:40:41

标签: relational-database tuple-relational-calculus

为什么元组关系演算中需要量词? 让我们说我有这样的说法:

  

{S.sname |学生中的S和(等级中存在G)(S.s#= G.s#)};

为什么我不能只使用它呢?

  

{S.sname |学生中的S和成绩中的G和S.s#= G.s#};

1 个答案:

答案 0 :(得分:2)

查询返回相同的值。但是在第二个例子中,你也可以要求学生G.grade,而在第一个例子中你不能。元组关系演算表达式的右侧描述了一组元组,其中仅保留左侧的属性。这里两个右侧的表达式描述了不同的元组集,但是左侧的投影碰巧从两者中保留了相同的值。

之间的区别 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
这种表示法称为Relational Algebra