关系代数中的笛卡尔积

6

我是一个完全的关系代数初学者,我不太明白笛卡尔积是如何工作的。

当我的两个表具有公共属性时,我想知道笛卡尔积会发生什么。如果两个表没有任何共同属性,我理解起来没有问题。

例如,我试着在我自己做的一个例子上理解它。

T1                          T2
----------                  -----------
A   B   C                   A    B   D
1   4   7                   1    4   8
2   5   3                   2    9   5
4   7   1                   7    3   2

如果我想做T1 x T2,当我想要写出连接T1第一行 A=1 , B=4 , C=7 和T2第二行 A=2 ,B=9 ,C=5 的代码时,A和B列会发生什么变化?
如果您能展示给我T1 x T2的结果,那将非常有用!

请提供您所使用的关系代数变体的参考。许多代数都具有带有有序属性的关系,这些属性可以具有重复的名称;因此它们可以计算任意两个关系的乘积。 - philipxy
可能是包含相同列的表的笛卡尔积的重复问题。 - philipxy
1个回答

7

编辑: 如评论区所讨论的那样,我正在编辑这个答案以便更好地理解问题。

由于这可能是一个重复的问题,请参考此链接: 包含相同列的表的笛卡尔积

首先,它取决于您使用的代数。对于一些代数,可以在具有共同属性的表之间进行笛卡尔积,类似于交叉连接,而在其他代数中,不允许进行笛卡尔积,因此您必须重新命名属性。

p.s: 搜索交叉连接,因为它们类似于笛卡尔积,但没有加入条件,请参见您示例表的交叉连接的预期结果:

    T1                      T2                T1 X T2
----------              -----------     =    ----------------------------
A   B   C                A    B   D          T1.A T1.B T1.C T2.A T2.B T2.D
1   4   7                1    4   8           1     4   7    1    4    8
2   5   3                2    9   5           1     4   7    2    9    5
4   7   1                7    3   2           1     4   7    7    3    2
                                              2     5   3    1    4    8
                                              2     5   3    2    9    5
                                              2     5   3    7    3    2
                                              4     7   1    1    4    8
                                              4     7   1    2    9    5
                                              4     7   1    7    3    2 

参考链接:什么是笛卡尔积和交叉连接之间的区别?

此外,我强烈建议您查看并自己尝试一下!

RelaX - 关系代数计算器 http://dbis-uibk.github.io/relax/index.htm


1
当我在你给我的计算器中尝试我的示例时,我得到了“连接将导致非唯一列名;以下列出的列在两个关系中都出现:A、B”。那么,我应该得出结论,如果不重命名A和B,我就无法进行笛卡尔积吗? - Peni
哦,糟糕!我误解了你的问题。我会编辑我的答案。但是在这里纠正一下。笛卡尔积是自然连接的一种情况,其中连接的关系没有共同的属性名称。我误解了交叉连接,这样会给你一些有效的结果。 而且,是的,你应该得出这个结论。 - Victor Medeiros
哎呀,我想错误是我的,我不知道叉积和笛卡尔积之间有区别!但我的意思是叉积,这也是我在计算器上使用的(网站上称为交叉连接)!然后它给了我之前写的错误信息。 - Peni
奇怪。我使用了您提供的相同数据作为示例,它给出了有效的结果:截图1截图2 - Victor Medeiros
1
@Peni & VictorMedeiros 哈哈,我错过了一个指向自己答案的链接。请注意,该链接解释了这个答案仅适用于某些代数,对于其他代数是错误的,因此是误导性的,而且问题没有给出代数,所以祝问者好运。我觉得“更技术性”有点奇怪——它只是更全面,因为问题(就像这个问题)是一般性的。需要很多情况和概念是因为许多“代数”非常复杂(有时甚至不是“代数”)。通常是由SQL辩护引起的动机。 - philipxy
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接