如何用关系代数findMAX?

使用数据库,我如何使用关系代数来findMAX?

假设你有一个关系,A,有一个单一的属性,'a'(减less一个更复杂的关系,这是关系代数中的一个简单的任务,我相信你有这个),所以现在你想find最大A的价值

一种方法是findA与其自身的叉积,确保重命名'a',以便新的关系具有不同名称的属性。 例如:

(将'a'重命名为'a1')X(将'a'重命名为'a2')

现在select'a1'<'a2',得到的关系将具有除最大值之外的所有值。 为了得到最大值只需find你的原始关系之间的差异:

(A x A) - (select 'a1' < 'a2') ((rename 'a' as 'a1')(A) x (rename 'a' as 'a2')(A)) 

然后,按照Tobi Lehman在下面的评论中所build议的那样,使用project运营商减less到一个专栏。

用关系代数符号来写这个(如果我没记错的话)。 注意最后的重命名(即ρ)只是以与原始关系具有相同名称的属性结束:

ρa / a1πa1 ((A x A) -σa1 <a2ρa1 / a (A) xρa2 / a (A))))

我自己今天正在试图解决这个问题,就是我的两分钱。

可以说我们有A = 1,2,3

如果你使用

 A x A - (select 'a1' < 'a2') ((rename 'a' as 'a1')(A) x (rename 'a' as 'a2')(A)) 

你不会得到像1 | 1,2 | 1,3 | 2,3 | 1,3 | 2,3 | 3那样的单个最大值而不是两列

得到3的方式是

 project(a)A - project(a1)((select 'a1' < 'a2') ((rename 'a' as 'a1')(A) x (rename 'a' as 'a2')(A))) 

至less这是我在类似的情况下必须做的。

希望它可以帮助别人

我现在已经忘记了大部分的关系代数语法。 一个查询只是使用SELECTPROJECTMINUSRENAME

 SELECT v1.number FROM values v1 MINUS SELECT v1.number FROM values v1 JOIN values v2 ON v2.number > v1.number 

希望你可以翻译!

让我们认为我们有一个与属性A和值1,2,3的关系

 A 1 2 3 

所以现在..

项目A值并用A1重命名

 A1 1 2 3 

再次投影A值并用A2重新命名

 A2 1 2 3 

join这个A2<A1 ie \join_{A2<A1}
所以 – 输出模式:( A2整数,A1整数)

 A2<A1 1|2 1|3 2|3 

总是听到A2值会小于A1,因为我们join那样( a2<a1

现在项目A2的输出如下

 A2 1 2 

现在与原始属性差异

 A diff A2 
 A 1 2 3 
  diff 
 A2 1 2 

输出是3 ,这是最大值

嗨,我知道有人必须帮助编辑,为了更好看

我知道这是旧的,但这是一个手写的公式,可能会很方便!

在这里输入图像描述

关系A:1,2,3,4

 1. First we want to PROJECT and RENAME relation A 2. We then to a THETA JOIN with the test a1<a2 3. We then PROJECT the result of the relation to give us a single set of values a1: 1,2,3 (not max value since a1<a2) 4. We then apply the difference operator with the original relation so: 1,2,3,4 --- 1,2,3 returns 4 4 is the Max value. 
  Project x(A) - Project Ax (Select Ax < dx (A x Rename d(A))) 

查找最大值:

  • 战略:

    1. find那些不是MAX x

      • 将关系重命名为d以便我们可以将每个A x与所有其他A x进行比较。
    2. 使用set difference来find在前面的步骤中找不到的那些A x

  • 查询是: 在这里输入图像描述