【问题标题】:Relational Algebra for Cartesian product without duplicates无重复的笛卡尔积的关系代数
【发布时间】:2013-11-04 23:38:30
【问题描述】:

我有一个关系 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 交叉产品)?

【问题讨论】:

  • 请澄清“删除所有元组,使得没有键在输出中出现多次”。

标签: relational-algebra cartesian-product cross-product


【解决方案1】:

交叉产品(通常称为产品)是两个没有共同属性的关系的连接。除非您重命名 A 的属性以创建新关系,否则您无法将 A 与自身相乘。然后,产品将包含来自两种关系的不同属性集。就像任何其他关系代数运算一样,乘积总是会产生具有不同元组的关系。

你的问题有点不清楚。您示例中的三元组不包含 value 属性,因此我不明白您希望哪些元组出现在输出中。也许你的第一个问题可以改写为“是否有一个关系代数运算可以将每个元组从一个关系连接到另一个关系中的一个任意元组,而无需我指定要加入什么?”。不存在这样的操作,因为没有正式的系统可以为您决定哪个元组子集应该在结果中。希望这个答案是“显而易见的”,但如果你让你的问题更具体,那么也许有人可以给出更具体的答案。

关于你的第二个问题。是的,乘积非常简单地推广到任意数量的操作,并且是可交换的和关联的。乘积的数学定义是它是一个二元运算,但很容易想象一个类似的关系运算以任意数量的关系作为其操作数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-22
    • 2012-02-24
    • 2011-09-18
    • 2012-12-17
    • 2016-06-26
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多