我有一个关系A:
key | value
-----------
a | 2
b | 2
c | 9
d | 5
e | 3
如果我对自身执行两次叉积,我将得到三元组,例如 (a,b,a)、(a,a,a)、(a,a,b)、(b,c,b) 等.我有兴趣删除所有元组,这样在输出中不会出现多次。
首先,是否有一个关系代数声明?其次,是否可以将这种场景推广到多个交叉产品(即n
交叉产品)?
我有一个关系A:
key | value
-----------
a | 2
b | 2
c | 9
d | 5
e | 3
如果我对自身执行两次叉积,我将得到三元组,例如 (a,b,a)、(a,a,a)、(a,a,b)、(b,c,b) 等.我有兴趣删除所有元组,这样在输出中不会出现多次。
首先,是否有一个关系代数声明?其次,是否可以将这种场景推广到多个交叉产品(即n
交叉产品)?
叉积(通常称为product)是两个没有共同属性的关系的连接。除非您重命名 A 的属性以创建新关系,否则您无法将 A 与自身相乘。然后,产品将包含来自两种关系的不同属性集。就像任何其他关系代数运算一样,乘积总是导致具有不同元组的关系。
你的问题有点不清楚。您示例中的三元组不包含 value 属性,因此我不明白您希望哪些元组出现在输出中。也许您的第一个问题可以改写为“是否有一个关系代数运算可以将每个元组从一个关系连接到另一个关系中的一个任意元组,而无需我指定要加入的内容?” . 不存在这样的操作,因为没有正式的系统可以为您决定哪个元组子集应该在结果中。希望这个答案是“显而易见的”,但如果你让你的问题更具体,那么也许有人可以给出更具体的答案。
关于你的第二个问题。是的,乘积非常简单地推广到任意数量的操作,并且是可交换的和关联的。乘积的数学定义是它是一个二元运算,但很容易想象一个类似的关系运算将任意数量的关系作为其操作数。