使用关系代数的列之间的最大差异

时间:2012-02-07 02:49:03

标签: relational-algebra

是否可以获得两列之间的最大差异(例如起始和结束权重)?

现在我倾向于否,因为这需要一个新列,每列的两列之间有差异,然后取最大值。按照我想要的方式进行操作,因为在选择操作的条件下不允许算术运算(例如,不允许SIGMA(c1-c2< c3-c4)(表))。

披露:这是家庭作业问题的一部分。

2 个答案:

答案 0 :(得分:1)

可以按照您计划的方式完成,但您需要进行广义投影。广义投影是算子

Π(E1, E2,..., En)R

其中R是关系,E1 ... En是a⊕b形式的表达式,其中a和b是R或常数的属性,⊕是它们之间的任意二元运算符。结果是与属性E1 ... En。

的关系

这样你就可以将差异投射到一个新的关系(R':=Π(x-y)R),然后就像你计划的那样找到最大值。

如果我们不允许使用广义投影,那么我认为我们没有办法从另一个中实际减去一个属性,或实际上从它们计算任何东西,因为投影的定义只允许属性名称和定义选择只允许表达式aθb,其中a和b是属性或常量,θ是二元关系运算符(这是合乎逻辑的,因为如果我们有一个关系R(X,Y),那么我们没有关于X或Y的类型的想法,使它们的操作毫无意义。)

我认为广义投影是关系代数的一个很好的扩展。它在现实生活中显然非常有用,甚至可以从更科学的角度来保护它:如果我们在“X> 50”这样的值上允许二元条件运算符,那么我们已经对类型进行了假设,使得有点没有实际意义。不过,你的导师可能不同意。

答案 1 :(得分:0)

如果您希望在现实世界中这样做,您应该能够使用子查询(或视图,这相当于同样的事情)执行此操作,例如:

select max (diff) from (
    select high - low as diff from blah blah blah
)

这是否适用于关系代数的抽象世界,我不能说。我太忙于解决那些该死的现实问题: - )