たとえば、リレーショナル データベースに テーブルSuppliers
があり、 の値がSuppliers.ID
などの他のテーブルの列で使用されている場合、ユーザーが「システムからサプライヤー 15 を削除」しInvoice.Supplier
たい場合はどうすればよいでしょうか。
3 に答える
テーブルSupplier 15
にレコードがある場合。は関連付けられており、他のテーブルにレコードがあるInvoice
ため、rdbms は参照整合性エラーをスローします。Supplier 15
この種の削除の処理は、ビジネス ルールによって異なります。最初に関連レコードを削除するか、他のテーブルで使用されている場合にユーザーがレコードを削除できないようにする必要があります。
Invoice と Supplier の間の関係の性質によって異なります。
請求書はサプライヤーなしで存在できますか? 可能であれば、削除されたサプライヤを参照するすべての列を無効にすることもできます。それができない場合は、削除されたサプライヤに属する請求書を削除するか (請求書がサプライヤ オブジェクトのサブオブジェクトであると見なすことができる場合)、サプライヤが削除されないようにすることができます。それを参照する請求書があるためです。
@DanBracuk のコメントを詳しく説明します。
表に列を追加しますInActive bit NOT NULL DEFAULT 0
。
そのサプライヤを「削除」すると、これを 1 に設定し、サプライヤのマスター リストを除いてユーザー インターフェイスに表示しないようにして、再びオンにできるようにします。
ほとんどの商業会計パッケージはこのようなものを使用します。ほとんどの場合、非アクティブなサプライヤーの名前がわかっている場合は、ドロップダウンに入力できますが (受け入れられます)、ドロップダウン リストには表示されません。