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

时间:2013-11-08 16:36:33

标签: database duplicates relational-algebra

我正在完成一项功课,我真的被困了,已经有一个星期了。我不是要问这个问题的答案,而是我要怎么做。基本上我需要在单个元组中找到重复项。例如,如果每个条目都是用户ID和爱好,我怎样才能找到用户ID和爱好至少两次出现完全相同的所有条目?所以,如果我有以下元组......

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

2  | Running

3  | Football

1  | Swimming

3  | Football

3  | Football

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

1 个答案:

答案 0 :(得分:4)

我最近被分配了一个与我正在进行的数据库理论课程中的家庭作业非常类似的问题。在考虑了几分钟后,我有了解决方案!我们走了......

  1. 在桌面上执行两个相同的投影(我称之为 P 1且 P 2),限制为(唯一标识符)和被认为具有多个相同值( attr )的属性。在这篇文章中,ID和Hobby将是投影限制。
  2. 为其中一个投影重新调整列。换句话说,更改ID和Hobby的名称,但可能仍然是类似的。对于我们的示例,我们将 P 2的列重命名为ID2和Hobby2。
  3. 关键步骤!:在 P 1&之间执行交叉积的 P 2。这将允许每条记录与其他记录配对。这就是我们想要的。我将此表称为 C click here for a visual
  4. 使用ID = ID2和Hobby = Hobby2的条件(特定于此问题)对 C 执行选择。这将是表 S
  5. S 上执行投影以清除重复项,这将留下一个由配对ID和Hobby值的唯一记录组成的表。我们称之为 P S )。
  6. C - P S )的方式应用差异运算符。这将消除将记录与其“对应”进行比较的情况,只留下真正重复的记录。
  7. 最后,使用ID限制对此结果表执行投影。
  8. 这应该适用于检测任何其他类型/形式的重复项。只需更改标准以适应手头问题的详细信息,从步骤4开始,然后再开启。