簡略化するには...ユーザーEAVデータの履歴を、特にアドレスを指している場所に入れたいのですが、冗長性を排除するのは難しいようです。EAVのアドレス履歴をデータベースに保存する方法を教えてください。
アドレスには独自のテーブルがあります。
ユーザは、usersテーブルと他のエンティティテーブルの標準データに加えて、奇妙なデータの負荷があります。この奇妙なユーザーデータをEAVテーブルに入れることを計画していました。このユーザEAVデータは、アドレステーブルに格納されたアドレスを指す複数のエントリを含むこともできます。
変更の履歴を記録します。
したがって、ユーザーのアドレスはそれが起こる必要があるように思えるものを変更したときです:
- 新しいアドレスがアドレステーブルに追加されます。
- 古いアドレス行を指す代わりに古いEAVエントリは、アドレステーブルの新しい行を指すように更新されます。多くの仕事のように見えるのではなく
- EAV行への変更はEAV履歴テーブルに書き込まれます(トリガを使用します)
正直に言うと:
- 万一古いですアドレステーブルのエントリは永遠に読み取り専用になりますか? (OK、私の推測ははい、倉庫に入れられている古いレコードをクリアしているが、ちょうどそうだと思う... icky)。
- これらのアドレスエントリを再利用するにはどうすればよいですか? (おそらく、新しいユーザーの入力に一致する既存のエントリを提供することにより)
をすべてがちょうどEAVので、汚れたようで、ない;)
EAVは、アドレスとしてよく理解されているもののために使用する最悪の構造です。 –
申し訳ありませんが、おそらく多少の誤解(私は質問を少し明示的に調整しました)。アドレスはすでにテーブルにあります。そのアドレスインスタンスは奇妙なデータです(オプションで多少稀です)ので、その参照はEAVテーブルに格納されます。 のように: - ><ユーザーeavテーブル(単列参照)> - ><住所表> –
申し訳ありませんが、最初はあなたに従っていませんでした。顧客に関連するEAVデータをその顧客に属する住所に関連付けている場合は、正しい経路にある場合とそうでない場合があります。 EAVデータがどのようにアドレスに依存するかによって異なります。それは硬い依存か柔らかいものか?あなたが私に従うならば、それは「顧客の請求先住所」または「実際に私たちがその請求書を送った場所」を指していますか?真に "厄介な"部分は、古いデータをパージします。参照整合性を維持しようとするとかなり醜いです。それ以外の場合は、おそらく正しい方向に向いています。 –