关系代数交叉积和自然连接

时间:2016-10-30 18:29:07

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

我对何时使用这两个操作符感到困惑。我觉得我理解他们但我很难弄清楚何时需要他们在关系代数陈述中。有人可以给我一些见解/建议吗?

1 个答案:

答案 0 :(得分:0)

关系代数的某些版本具有关系标题,这些标题是(无序,唯一命名)属性的集合。然后(关系(笛卡尔))PRODUCT,又名CROSS JOIN,又称CROSS PRODUCT,仅在输入关系不共享属性名称但其他方式像NATURAL JOIN时才定义。因此,它的作用是确认您希望没有共享属性名称。

(关系代数的某些版本具有不是集合的关系标题;属性可以被排序和/或多个属性可以具有相同的名称。通常PRODUCT为每个输入属性输出一个属性。如果有一个NATURAL JOIN那么它的结果就像先做PRODUCT,然后限制同名属性对的相等,然后PROJECT出每对的一个属性。所以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]
  

现在取代数:

     
      
  • 其表/关系的每个陈述
  •   
  • 通过natural(自然连接)
  • 的每个表/关系语句的AND   
  • 表/关系语句的每个OR(必须具有相同的列/属性)by∪(union)
  •   
  • 每个AND NOT语句(必须具有相同的列/属性)由\(差异)
  •   
  • 每个AND 条件按σ条件
  •   
  • 每个保持名称保持由π名称保持(投影)(并按π名称删除以保持
  •   
  • 每个列/属性在给定语句中通过ρ(重命名)重命名。
  •   
     

∩(十字路口)和x(产品)是⋈的特殊情况(∩两者兼而有之)   侧面相同的列/属性和x表示不共享   列/属性)。

(ρ Loan-Balance/Balance Loan) ⋈ Deposit