0

宿題を終えようとしていて、本当に行き詰まって 1 週間が経ちました。私は質問に対する答えを求めているのではなく、どうやってそれを行うかを尋ねています。基本的に、単一のタプルで重複を見つける必要があります。たとえば、各エントリがユーザー ID と趣味である場合、ユーザー ID と趣味が少なくとも 2 回まったく同じであるエントリをすべて見つけるにはどうすればよいでしょうか? したがって、次のタプルがあった場合...

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

2  | Running

3  | Football

1  | Swimming

3  | Football

3  | Football

エントリが重複しているユーザーのユーザー ID を見つけるにはどうすればよいですか? (1と3)

4

1 に答える 1

6

私は最近、現在受講しているデータベース理論コースの宿題として、これと非常によく似た問題を割り当てられました。数分間考えた後、私は解決策を見つけました!どうぞ..

  1. テーブルに対して 2 つの同一のプロジェクションを実行します ( P 1 とP 2 と呼びます)。制限は、テーブルキー(一意の識別子) と、同じ値が複数回出現すると考えられる属性 ( attr ) です。この投稿のコンテキストでは、ID と趣味が投影制限になります。
  2. 投影の 1 つの列のタイトルを変更します。というか、IDとホビーの名前を変えて、でも似たようなものかもしれません。この例では、P 2 の列の名前を ID2 と Hobby2 に変更します。
  3. クリティカルステップ!: P 1 とP 2の間でクロス積を実行します。これにより、各レコードが他のすべてのレコードとペアになることができます。これが必要です。このテーブルをCと呼びます。ビジュアルはこちら
  4. ID = ID2、Hobby = Hobby2 という基準 (この問題に固有) を使用して、Cで選択を実行します。これはテーブルSになります。
  5. Sに対してプロジェクションを実行して重複を消去します。これにより、ID と趣味の値のペアの一意のレコードで構成されるテーブルが残ります。これをP ( S ) とします。
  6. C - P ( S )の方法で差分演算子を適用します。これにより、レコードが「対応する」レコードと比較されるケースが取り除かれ、真の重複であるレコードのみが残ります。
  7. 最後に、ID の制限付きで、この結果のテーブルに対して射影を実行します。

これは、他の種類/形式の重複を検出するために機能するはずです。ステップ 4 以降で、目前の問題の詳細に合わせて基準を変更するだけです。

于 2016-02-20T08:53:27.253 に答える