📜  关系代数中的笛卡尔积运算

📅  最后修改于: 2021-09-08 15:52:58             🧑  作者: Mango

先决条件 – 关系代数
我们已经知道关系只不过是一组元组,这里我们将有 2 组元组。

在对两组元组上的两个关系应用笛卡尔积时,它将一个一个地从左侧集合(关系)中取出每个元组,并将其与右侧集合(关系)中的所有元组配对。

因此,度数为 p 的两个关系 A(R1, R2, R3, …, Rp) 和度数为 n 的 B(S1, S2, S3, …, Sn) 的交叉积是关系 C(R1, R2, R3, …, Rp, S1, S2, S3, …, Sn) 具有度数 p + n 属性。

CROSS PRODUCT 是一种二元集合运算手段,一次我们可以对两个关系应用该运算。但是我们正在执行操作的两个关系没有相同类型的元组,这意味着这两个关系的联合兼容性(或类型兼容性)是没有必要的。

符号:

A ✕ S

其中 A 和 S 是关系,
符号“✕”用于表示 CROSS PRODUCT运算符。

例子:
考虑下面两个关系 STUDENT(SNO, FNAME, LNAME) 和 DETAIL(ROLLNO, AGE) :

SNO FNAME LNAME
1 Albert Singh
2 Nora Fatehi

ROLLNO AGE
5 18
9 21

在 STUDENT 和 DETAIL 上应用 CROSS PRODUCT:

STUDENT ✕ DETAILS

SNO FNAME LNAME ROLLNO AGE
1 Albert Singh 5 18
1 Albert Singh 9 21
2 Nora Fatehi 5 18
2 Nora Fatehi 9 21

我们可以观察到 STUDENT 关系中的元组数为 2,DETAIL 中的元组数为 2。因此执行 CROSS PRODUCT 的结果关系中的元组数为 2*2 = 4。

笛卡尔积(CROSS PRODUCT)运算要点:

  1. 交叉乘积操作产生的关系的基数(元组数)等于第一个关系中的属性数(比如 m)乘以第二个关系中的属性数(比如 n)。
    Cardinality = m*n
  2. 度数为 p 的两个关系 A(R1, R2, R3, …, Rp) 和度数为 n 的 B(S1, S2, S3, …, Sn) 的叉积是关系 C(R1, R2, R3, …, Rp, S1, S2, S3, …, Sn) 具有度数 p + n 属性。
    Degree = p+n
  3. 在 SQL 中,可以使用 CROSS JOIN 应用 CARTESIAN PRODUCT(CROSS PRODUCT)。
  4. 一般来说,我们不会不必要地使用笛卡尔积,这意味着没有适当的含义我们不使用笛卡尔积。一般情况下,我们使用笛卡尔乘积,然后选择操作和运算符比较如下图所示:
    σ A=D (A ✕ B)

    上面的查询给出了有意义的结果。

    而这种 Select 和 Cross Product 操作的组合非常流行,以至于 JOIN 操作都受到了这种组合的启发。

  5. CROSS PRODUCT 是一种二元集合运算手段,一次我们可以对两个关系应用该运算。