使用关系代数,如何在元组中找到重复的行?

use*_*720 0 database relational-algebra duplicates

我正在完成一项家庭作业,但我确实陷入困境,已经呆了一个星期。我不是在问这个问题的答案,而是在问该怎么做。基本上我需要在一个元组中找到重复项。例如,如果每个条目都是一个用户ID和一个爱好,那么我如何找到至少两次用户ID和爱好完全相同的所有条目?所以如果我有以下元组...

ID | Hobby
----------
1  | Swimming

2  | Running

3  | Football

1  | Swimming

3  | Football

3  | Football
Run Code Online (Sandbox Code Playgroud)

如何找到重复条目的用户的用户ID?(1和3)

Cha*_*les 5

最近,我在我正在上的数据库理论课程中为我分配了一个与此作业非常相似的问题。经过几分钟的思考,我找到了解决方案!开始了..

  1. 在表上执行两个相同的投影(我将它们称为P 1和P 2),其中的限制是表(唯一标识符)和被认为多次出现相同值的属性attr)。在本文的背景下,ID和Hobby将成为投影限制。
  2. 重命名其中一个投影的列。或者换句话说,更改ID和Hobby的名称,但也许还是类似的。对于我们的示例,我们将P 2的列重命名为ID2和Hobby2。
  3. 关键一步!:在P 1和P 2 之间执行叉积。这将使每条记录与其他每条记录配对。我会打电话给这个表Ç点击此处查看
  4. 使用ID = ID2和Hobby = Hobby2的条件(特定于此问题)在C上执行选择。这将是台小号
  5. S进行投影以清除重复项,这将留下一个表,该表包含成对的ID和Hobby值的唯一记录。我们称它为PS)。
  6. C - PS)的方式应用差分算子。当一条记录与其“对应项”进行比较时,这将消除情况,只保留真正重复的记录。
  7. 最后,在ID的限制下,对该结果表进行投影。

这应该可以检测到任何其他种类/形式的重复项。从步骤4开始,只需更改标准以适合当前问题的细节即可。