只是为我的数据库课程做一个作业,我只想仔细检查一下我是否正确地围绕关系代数。
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))))
这是正确的做法吗?
答案 0 :(得分:2)
我不知道。其他人也不太可能知道。
RA课程通常仅限于选择,投影和连接操作员。 RA课程通常不包括聚合。甚至没有任何标准方法(我知道)RA会进行聚合。您的课程为关系进行聚合定义的运算符是什么?运营商为其结果生成什么类型的价值?关系?别的什么?如果不是其他的话,你的课程如何解释对该结果的关系限制,因为这些结果值不是关系,但限制仅适用于关系?
代数地,这种情况以自然连接(produkt x ordre)开始。
[自然连接的结果]进行聚合操作。因此,此自然连接将出现在您为聚合运算符指定关系输入参数的位置。用于指定聚合的其他所需规范是输出属性名称(总计)以及计算它们的方式(SUM(...))。这些可能出现在聚合运算符符号旁边的下标中作为“注释”,非常类似于投影上的属性列表和限制条件的限制条件。但是有关此运算符的任何内容都是特定于课程的,因为据我所知,没有任何商定的标准符号表示聚合。
然后,如果定义聚合运算符以返回关系,则可以将聚合结果指定为条件“total> = 10000”的限制的输入参数。