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

将某个SQL查询转换为关系代数,sql,database,relational-algebra,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 = pro

我正在为我的数据库课程做一个作业,我只想再次检查一下我是否正确地理解了关系代数

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”的限制的输入参数。

感谢您的回复!根据我们的讲课,老师使用的幻灯片ℑ 用于聚合。例如,从dvd中选择计数(*)将是ℑ 计数*(DVD)。“该运算符为其结果生成什么类型的值?”-我不确定这是什么意思。我认为他想要的是能够从RA读取SQL查询。我担心这样的事情会成为答案。我担心你的讲师甚至可能不知道代数到底是什么(代数是一组对某些类型闭合的运算符。关系代数是一组对包括关系类型的某些类型闭合的运算符)。关系代数不仅仅是一种晦涩难懂的SQL编写方式。我真的很想知道所有这些老师认为他们通过让学生“将SQL翻译成RA”达到了什么目的。这是我能想象到的最大的徒劳无益的练习。再次感谢你,我们也不明白为什么我们要学习这个。例如。该符号中有哪些规定用于记录COUNT()或SUM()的属性名称?(关系中的属性必须有名称,返回关系的运算符的任何RA符号都必须提供这些属性名称。)该符号中有哪些规定用于在一次go中进行多个聚合?(类型选择计数(1),总和(numer)FROM…)这些讲座或幻灯片在线吗?嗯,别误会我。我并不是说学习和理解RA毫无意义。恰恰相反。RA是基础性的。SQL不是。这是他们出错的顺序。RA应该放在第一位,“翻译”,如果有的话,应该是从RA到SQL。