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