CustomerLocation テーブルに対するこのユーザーの回答を誰かが理解するのを手伝ってくれませんか。注文テーブルに住所を保存するための優れた方法が本当に必要です。
私が探しているのは、住所を設定する方法です。そのため、住所を編集しても、顧客が住所を更新したり移転したりしても、注文は影響を受けません。
現状では、スキーマは次のようになります。
Person |EntityID|
EntityAddress |EntityID|AddressID|
Address |AddressID|AddressType|AddressLine1|AddressLine2|
Order |OrderID|BillingAddressID|
この回答は、コメントに対する質問から編集されました。
1つの解決策は、注文テーブルのアドレステーブルにFKを使用することです。これにより、注文に使用された住所が表示され、ユーザーの現在の住所から住所が分離されます。
この作業を行うには、新しいアドレスを挿入し、その新しいアドレスをユーザーテーブルにリンクする必要があります。つまり、アドレスは1回だけ書き込まれ、編集はエンドユーザーにとっては幻想です。関連付けをUserテーブルからタイムスタンプ付きの関連付けテーブルに移動することにより、ユーザーが関連付けられたすべてのアドレスの履歴を効果的に保存できます。これにより、編集/住所の履歴が得られ、住所テーブルに不変のデータが保持されます。
@ MDCCL 記載:
注文関連のデータを保持するための1つのテーブルと、住所情報を保持するための別のテーブルを持つデータベース構造を編成します。そして、はい、これら2つのエンティティタイプ間の多対多の関係を表すテーブルを確実に作成できます。ユーザーがアドレス属性を変更できる場合は、そのような変更を追跡する必要があるため、対応する
AddressHistory
を有効にする必要があります。 この投稿 は後者の側面に関連しています。
MDCCLは、ここでユーザーの現在のアドレスを見つける方法の概要も示しました。
お持ちの履歴テーブルの最新バージョンを取得するには、対応する
AddressId
のMAX(AuditedDateTime)
を考慮する必要があります。最初のステップは、可能な限り最高の概念的および論理的な配置をモデル化/設計することです。次のステップは、データを挿入、更新、削除、および選択する適切な方法を見つけることです。