1

重複した行を実際に削除せずに、データベース内の重複を処理する通常の方法があるかどうかを知りたいです。または、私が達成しようとしていることの特定の名前なので、チェックアウトできます。

なぜ重複を保持する必要があるのですか? 私は彼らを監視しなければならないからです。それらは重複しており、たとえば検索できないことを知っておく必要がありますが、同時に、外部ソースから行を更新し、それらを削除すると元に戻るため、それらを保持する必要があります外部ソースから更新するとすぐにデータベース。

私には2つのアイデアがあります:

  1. 「検索可能な」ブール列を追加しますが、それは部分的な解決策だと思います。将来的には不十分になる可能性があります

  2. 追加の列「duplicate_of」があります。行が重複している列のIDを保持します。同じテーブルの外部キーになるのはちょっと変ですね。

特定のプログラミングの質問ではないことは知っていますが、誰かが同様の状況 (Facebook - 他の人の複製であるページを追跡するページ) を処理したに違いないと思います。

EDIT:これらは、主にその場所(lat、lng)によって特定されていない、密接な重複であるため、DISTINCTはおそらくここでは解決策ではありません

4

2 に答える 2

2

値を持つビューを作成しDISTINCTます。追加の列を検索可能にするのは退屈に聞こえます。あなたの2番目のアイデアは実際にはより実現可能であり、自己参照テーブルについて奇妙なことは何もありません.

于 2013-01-28T18:37:33.877 に答える
2

解決策は、他のいくつかの要因によって異なります。特に、データベースは実際の削除と更新をサポートしていますか (重複情報の設定は別として)?

さまざまなソリューションがあります。1 つは、個別の値を定期的に別のテーブルに配置することです。これは、バッチ挿入があり、更新/削除がない場合にうまく機能します。

更新中のデータベースがある場合は、記録にバージョン番号を保持することをお勧めします。これにより、追跡できます。おそらく、それが重複している場合、その中に別の重複キーがあります。

2番目のアプローチの問題は、重複のツリーのような構造になる可能性があることです。A-->B-->C および D--> の場合、A と D は重複していますが、これは明らかではありません。常に最も早い値入力し、更新や削除がない場合、この解決策は合理的です。

于 2013-01-28T18:40:30.987 に答える