これはいいデザインなのかしら。住所情報(たとえば、番地、郵便番号/郵便番号、国、ファックス、電子メール)を必要とするテーブルがいくつかあります。同じアドレスが複数回繰り返される場合があります。たとえば、住所がサプライヤに対して保存され、その後、サプライヤに送信される各発注書に保存される場合があります。その後、サプライヤは住所を変更でき、その後の発注書には新しい住所が必要になります。これよりも複雑ですが、これは要件の例です。
オプション1すべてのアドレス列を属性としてさまざまなテーブルに配置します。作成時に、詳細をサプライヤからPOにコピーします。の複数のコピーを保存する可能性があります
オプション2別のアドレステーブルを作成します。サプライヤおよび発注書テーブルからアドレステーブルへの外部キーを用意します。更新は意図した以上に変更される可能性があるため、アドレステーブルでの挿入と削除のみを許可してください。次に、アドレステーブルから、何も参照されなくなった行を削除して、未使用の行が残らないようにするスケジュールされたタスクがあります。おそらく、アドレステーブルのすべての非pk列に一意の制約があり、重複も停止します。
私はオプション2に傾いています。もっと良い方法はありますか?
編集:送信時のアドレスを発注書に残しておく必要があります。また、配送先住所と請求先住所がある可能性があるため、私が提案したのは少し複雑です(住所情報を持つ他のテーブルもたくさんあります)。
しばらくすると、古い発注書を日付に基づいてまとめて削除します。この後、何も参照されなくなったアドレスレコードをガベージコレクションするつもりでした(そうしないと、リークが発生しているように感じます)。