0

だから私はSQL関係の問題を抱えています。個人に関する情報の記録を保持したいデータベースがあるとしましょう。これで、その情報を受け取るテーブルをセットアップしました。ここまではよかった。

多くの場合、重複した情報がテーブルで発見され、削除されます。特定のフィールドが別の行の別のフィールドと同じ値を持つ場合、そのレコードは重複していると見なされます。例: メールの重複。

ここで、データベースに別のテーブルを作成して、これまでに発見および削除されたすべての重複を追跡したいと考えています。これについて私が最初に考えたのは、外部キー関係を作成することでした。そこで、テーブルを作成してdupesテーブルに接続しましたpersons。この関係は、単純な外部から主キーへの関係であり、削除時の制約がありました。

最初はうまくいったかもしれませんが、dupesテーブルが重複していたために削除されていなくても、削除されたレコードを受け取っていたという問題が発生しました。persons気に入らないという理由だけでテーブルから人を削除することにしたとしても、dupesとにかくテーブルに保存されるため、これは問題でした。

disposition field次に、personsテーブルに a を作成し、それを一意または主キーとしてdupesテーブルのインデックス外部キーに接続してみませんか。問題は、一意のキーには一意の値が必要であるため、dupeまたはの複数の配置がI don't like you機能しないことです。もう 1 つのオプションはdisposition field、主キーを作成することでした。ただし、同じ問題があります。

この問題の正しい関係は何ですか?

4

2 に答える 2

1

この実装について考えることができます。「削除前」チェックを備えた on delete トリガー。削除前のチェックでは、削除されるレコードが重複しているかどうかを確認します。ただし、すべての RDBMS システムがそのようなチェックをサポートするかどうかはわかりません。

IMO、重複が削除された後でもレコードが保持されることになっているため、理論的な関係は複雑です。

于 2012-09-13T15:07:12.420 に答える
0

外部キーはこの問題を解決しません。トリガーと、まさに必要なものを発見しました。

于 2012-09-19T21:18:05.660 に答える