【问题标题】:Relational Algebra Cross Product and Natural Join关系代数叉积和自然连接
【发布时间】:2016-10-30 18:29:06
【问题描述】:

我对何时使用这两个运算符感到有些困惑。我觉得我理解它们,但我很难弄清楚什么时候在关系代数语句中需要它们。有人可以给我一些见解/建议吗?

【问题讨论】:

  • 请提供您正在使用的实数代数版本的参考。或者描述关系的组成部分以及如何调用运算符。
  • 您是否在 Google 上搜索过您的(可能是合适的)标题,即“关系代数交叉乘积和自然加入站点:stackoverflow.com”?

标签: relational-algebra cross-join natural-join


【解决方案1】:

一些版本的关系代数的关系标题是一组(无序的、唯一命名的)属性。然后 (relational (Cartesian)) PRODUCT,又名 CROSS JOIN,又名 CROSS PRODUCT,仅在输入关系不共享属性名称但在其他方面类似于 NATURAL JOIN 时才定义。所以它的作用是确认你期望没有共享的属性名。

(某些版本的关系代数具有未设置的关系标题;属性可以排序和/或多个属性可以具有相同的名称。通常 PRODUCT 为每个输入属性输出一个属性。如果有一个 NATURAL JOIN 那么它的结果就像首先执行 PRODUCT,然后限制同名属性对的相等性,然后投影出每对的一个属性。因此,PRODUCT 适用于任何两个输入,并且当输入具有重复的属性名称时,NATURAL JOIN 可能未定义,但是当没有共享属性名称时,它们会给出相同的结果。)

至于why you would compose any particular relational algebra query

每个表/关系都有一个由参数化的语句 列/属性。 (它的“特征谓词”。)行/元组 使陈述为真进入表/关系。首先找到 给定表/关系的语句:

// customer [Cust-Name] has £[Balance] in account [Acc-No] at branch [Branch]
Deposit (Branch, Acc-No, Cust-Name, Balance)
// customer [Cust-Name] loan [Loan-No] balance is £[Balance] at branch [Branch]
Loan(Branch, Loan-No, Cust-Name, Balance)

现在把这些给定的陈述放在一起,得到一个陈述,只有 我们想要满足的行。使用 AND、OR、AND NOT 和 AND 条件。保持或 放下名字。如果需要,请使用新名称。

    customer [Cust-Name] loan [Loan-No] balance is £[Loan-Balance] at branch [Branch]
AND customer [Cust-Name] has £[Balance] in account [Acc-No] at branch [Branch]

现在得到代数替换:

  • 每个语句都按其表/关系进行
  • 表/关系语句的每个 AND 由 ⋈(自然连接)
  • 表/关系语句的每个 OR(必须具有相同的列/属性)由 ∪(联合)
  • 每个 AND NOT 语句(必须具有相同的列/属性)由 \(差异)
  • 每个 AND 条件 by σ 条件
  • 每一个 names to keep 由 π names to keep(投影)(和 Dropping by π names to keep
  • 给定语句中的每个列/属性都由 ρ(重命名)重命名。

∩(交集)和 x(乘积)是 ⋈ (∩ 对于两者的特殊情况 两侧相同的列/属性和 x 表示不共享 列/属性)。

(ρ Loan-Balance/Balance Loan) ⋈ Deposit

【讨论】:

    猜你喜欢
    • 2012-12-17
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多