【问题标题】:Maximum difference between columns using relational algebra使用关系代数的列之间的最大差异
【发布时间】:2012-02-07 02:49:03
【问题描述】:

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

现在我倾向于否,因为这需要一个新列,其中每行的两列之间存在差异,然后取其中的最大值。以我原本打算的方式进行操作也不起作用,因为在选择操作的条件下不允许算术运算(例如,不允许 SIGMA (c1 - c2

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

【问题讨论】:

  • 如果我理解正确的话,“两列之间的最大差异”的结果是一个标量值,而任何关系运算的结果都是一个关系。

标签: relational-algebra


【解决方案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”之类的值使用二元条件运算符,那么我们已经对类型做出了假设,从而呈现了这一点有点无意义。不过,您的导师可能不同意。

【讨论】:

    【解决方案2】:

    如果您希望在现实世界中执行此操作,您应该能够使用子查询(或视图,这几乎是相同的东西)来执行此操作,例如:

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

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

    【讨论】:

      猜你喜欢
      • 2013-03-03
      • 2017-04-18
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 2019-05-06
      • 1970-01-01
      • 2015-04-02
      相关资源
      最近更新 更多