2

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

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

这是正确的做法吗?

4

1 回答 1

2

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

RA 课程通常仅限于选择、投影和加入运算符。RA 课程通常不涵盖聚合。RA 甚至没有任何标准方法(据我所知)进行聚合。

您的课程定义的用于对关系进行聚合的运算符是什么?该运算符为其结果生成什么类型​​的值?关系?还有什么?如果还有其他问题,鉴于这些结果值不是关系,但限制仅适用于关系,您的课程如何解释对该结果进行关系限制?

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

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

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

于 2012-09-16T16:45:05.713 回答