将某个SQL查询转换为关系代数



在为我的数据库课程做作业时,我想仔细检查我的关系代数。

SQL:

SELECT dato, SUM(pris*antall) AS total
FROM produkt, ordre
WHERE ordre.varenr = produkt.varenr
GROUP BY dato
HAVING total >= 10000

关系代数:

σ total >= 10000 (
ρ R(dato, total)(
σ ordre.varenr = produkt.varenr (
dato ℑ SUM(pris*antall (produkt x ordre)
)
)
)

这是正确的吗?

我不知道。其他人也不太可能知道。

RA课程通常仅限于选择、投影和加入操作员。RA课程通常不包括聚合。据我所知,RA甚至没有任何标准的方法来处理聚合。

您的课程定义了什么运算符来对关系进行聚合?该运算符为其结果生成什么类型的值?关系?还有别的吗?如果是其他事情,你的课程如何解释对该结果进行关系限制,因为这些结果值不是关系,但限制只对关系有效?

在代数上,这种情况以自然连接(produkt x ordre)开始。

此自然联接的结果将进行聚合操作。因此,这种自然联接将出现在您为聚合运算符指定关系输入参数的位置。指定聚合所需的其他规范是输出属性名称(total)和计算它们的方法(SUM(…))。这些名称可能以"注释"的形式出现在聚合运算符符号旁边的下标中,很像投影上的属性列表和限制上的限制条件。但是,关于这个运算符的任何事情都是特定的,因为据我所知,还没有任何商定的聚合标准表示法。

然后,如果聚合运算符被定义为返回关系,则可以将聚合结果指定为条件为"total>=10000"的限制的输入参数。

最新更新