適切に正規化されていない古いデータベースを維持する必要があります。たとえば、注文から納品日までのプロジェクトのさまざまなマイルストーンに対して、5つ以上の異なる日付列を持つように成長した(またはキノコになっている)プロジェクトテーブルがあります。番地、メールアドレス、またはWebリンクの列がそれぞれにあるテーブルもいくつかあります。
構造を正規化し、住所や予定日などのテーブルを作成し、1:Nの関係(顧客ごとの住所、プロジェクトごとの期日など)を可能にするために必要なテーブルを作成したいと思います。
現在、詳細テーブルのデータへの変更を処理する方法が完全にわかりません。たとえば、顧客の配送先住所の変更について考えてみます。複数のレコード(場合によっては複数のテーブル内)がそのレコードを参照する可能性があるため、アドレステーブルのデータを変更することは問題外です。新しいアドレスレコードを追加すると、他の行に外部キー関係がない場合、古いレコードが孤立したままになる可能性があります。
私はこれを処理するために次の方法について考えました:
新しい詳細レコードを追加し、マスターテーブルの更新トリガーをチェックインして、古い詳細レコードを削除する必要があるかどうかを確認します。これには、詳細テーブルと関係のあるすべてのテーブル、それらすべて、またはsprocに関する知識が必要になります。私はこの分離の喪失が好きではありません。また、アクティブなトランザクションにより多くのテーブルが含まれます。
トリガーに古い詳細レコードの削除を試みさせ、エラーをキャッチします。これはただ間違っていると感じます。
孤立したレコードを使用して、定期的なメンテナンスタスクですべての詳細テーブルをクリーンアップします。
複数のマスターテーブルにリンクされている詳細テーブルのデータ変更を処理するための推奨される方法は何ですか?これを読むためのヒントはありますか?