0

我正在完成一项家庭作业,我真的被困住了一个星期。我不是在问这个问题的答案,而是我将如何去做。基本上我需要在单个元组中找到重复项。例如,如果每个条目是一个用户 ID 和一个爱好,我如何找到用户 ID 和爱好至少出现两次完全相同的所有条目?所以如果我有以下元组......

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

2  | Running

3  | Football

1  | Swimming

3  | Football

3  | Football

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

4

1 回答 1

6

我最近在我目前正在学习的数据库理论课程中被分配了一个与此非常相似的家庭作业问题。想了几分钟,我有办法了!开始了..

  1. 在您的表上执行两个相同的投影(我将它们称为P 1 和P 2),限制是表(唯一标识符)和被认为具有多次出现相同值的属性(attr)。在这篇文章的上下文中,ID 和 Hobby 将是投影限制。
  2. 重新命名其中一个投影的列。或者换句话说,改变 ID 和 Hobby 的名称,但可能还是类似的东西。对于我们的示例,我们将P 2 的列重命名为 ID2 和 Hobby2。
  3. 关键一步!:在P 1 和P 2之间执行叉积。这将允许每条记录与其他记录配对......这就是我们想要的。我将此表称为C单击此处查看视觉效果
  4. 使用 ID = ID2 和 Hobby = Hobby2 的条件(特定于此问题)在C上执行选择。这将是表S
  5. 在S上执行投影以清除重复项,这将留下一个包含配对 ID 和 Hobby 值的唯一记录的表。我们称它为P ( S )。
  6. 以C - P ( S )的方式应用差分算子。这将消除将记录与其“对应项”进行比较时的情况,只留下真正重复的记录。
  7. 最后,在此结果表上执行投影,并限制 ID。

这应该适用于检测任何其他类型/形式的重复项..只需更改标准以适应手头问题的细节,从第 4 步开始,等等。

于 2016-02-20T08:53:27.253 回答