我对何时使用这两个运算符有点困惑。我觉得我理解它们,但我很难弄清楚何时在关系代数语句中需要它们。有人可以给我一些见解/建议吗?
1 回答
一些版本的关系代数的关系标题是(无序的、唯一命名的)属性集。然后 (relational (Cartesian)) PRODUCT,aka CROSS JOIN,aka CROSS PRODUCT,仅在输入关系不共享属性名称但在其他方面类似于 NATURAL JOIN 时才定义。所以它的作用是确认你期望没有共享的属性名。
(某些版本的关系代数具有未设置的关系标题;属性可以排序和/或多个属性可以具有相同的名称。通常 PRODUCT 为每个输入属性输出一个属性。如果存在 NATURAL JOIN,则其结果将是就像首先做 PRODUCT,然后限制同名属性对的相等性,然后投影出每对的一个属性。所以 PRODUCT 适用于任何两个输入,当输入具有重复的属性名称时,NATURAL JOIN 可能未定义,但它们当没有共享属性名称时,将给出相同的结果。)
每个表/关系都有一个由列/属性参数化的语句。(它的“特征谓词”。)使语句为真的行/元组进入表/关系中。首先找到给定表/关系的语句:
// 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条件
- 每个 Keeping names to keep by π names to keep (projection) (and Dropping by π names to keep )
- 给定语句中的每个列/属性由 ρ(重命名)重命名。
∩(交集)和 x(乘积)是 ⋈ 的特例(∩ 表示两边相同的列/属性,x 表示没有共享的列/属性)。
(ρ Loan-Balance/Balance Loan) ⋈ Deposit