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

时间:2012-09-15 15:29:31

标签: sql database relational-algebra

只是为我的数据库课程做一个作业,我只想仔细检查一下我是否正确地围绕关系代数。

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))))

这是正确的做法吗?

1 个答案:

答案 0 :(得分:2)

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

RA课程通常仅限于选择,投影和连接操作员。 RA课程通常不包括聚合。甚至没有任何标准方法(我知道)RA会进行聚合。

您的课程为关系进行聚合定义的运算符是什么?运营商为其结果生成什么类型​​的价值?关系?别的什么?如果不是其他的话,你的课程如何解释对该结果的关系限制,因为这些结果值不是关系,但限制仅适用于关系?

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

[自然连接的结果]进行聚合操作。因此,此自然连接将出现在您为聚合运算符指定关系输入参数的位置。用于指定聚合的其他所需规范是输出属性名称(总计)以及计算它们的方式(SUM(...))。这些可能出现在聚合运算符符号旁边的下标中作为“注释”,非常类似于投影上的属性列表和限制条件的限制条件。但是有关此运算符的任何内容都是特定于课程的,因为据我所知,没有任何商定的标准符号表示聚合。

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