年に1回、お客様にメールを送信する必要があります(はい、オプトインです)。
私が見ているように、私たちは彼らに連絡した事実を記録する2つの方法があります(そのため、私たちは彼らにもう1年間連絡しないことを知っています)。ログ、またはCustomersテーブルの「lastContacted」フィールド。
Customersテーブルにフィールドを追加するのは好きではありません。ただし、ログルート(顧客がログテーブルにアクセスするたびにレコードを挿入する)に進む場合は、毎回それを調べて、顧客に連絡がありました。これは、時間の経過とともに、Customersテーブルの1つのlastContactedフィールドを検索するよりもはるかに重いクエリになると思います。
また、私にとって、ログは将来のある時点で定期的にクリアできるもののように感じます(おそらく、影響を認識していない別の開発者による決定)。
そのようなことにログを使用する必要がありますか?ここでのベストプラクティスは何ですか?
私は、顧客とのやり取り、コミュニケーション、および「タッチポイント」(郵送やその他のマーケティングを含む)に別のテーブルを使用します。顧客の通信データは通常、主流 CRMs に別個のビジネスエンティティとして格納されます。
DynamicsCRM では、たとえば、探している「スーパークラス」は Activity と呼ばれます。
アクティビティは、特定の種類のコミュニケーションのほか、そのコミュニケーションの件名、時間、詳細を記録するために使用されます。アクティビティとは、電子メール、電話、会議などのアクションです。アクティビティを使用すると、組織は各顧客または見込み顧客とのすべてのコミュニケーションを理解するのに役立ちます。
...各種類のやり取り(メール、電話、会議)は、「アクティビティ」の独自の「サブエンティティ」です。 etc。
「顧客関係を管理する」ためのカスタムソフトウェアを構築している場合、私はhighly確立されたCRM(DynamicsやSugarCRMなど)を試して、これらのシステムが顧客データをモデル化する方法を確認することをお勧めします。
また、私にとって、ログは将来のある時点で定期的にクリアできるもののように感じます(おそらく、影響を認識していない別の開発者による決定)。
これは、あなたが既存ログテーブルをすでに持っているように聞こえます別の目的これはビジネスにとってあまり重要ではありません(そうでなければ、誰もおそらく意図的に結論に至らないでしょう)そこからデータを削除する)。それがあなたが言っていることなら、私は強くお勧めします
1つのテーブルに異なる目的を混在させないでください!
あなたがすでに自分で述べたように、それはこれらの目的を対立に陥らせる高いリスクを負います。したがって、これは既存のログテーブルの使用を除外し、約3つの異なるオプションを提供します。
customerテーブルで追加の列lastContacted
を使用する
別のテーブルを使用して、Contact
と1:1の関係でCustomer
と呼びましょう
同じContact
テーブルを1:nの関係で使用する
ビジネスで最終連絡日のみを保存する必要はなく、連絡先の履歴(ログテーブルの提案に含めるもの)を保存する必要がある場合は、オプション3が必要であることは明らかです。それが当てはまらず、ビジネスで必要な場合最終連絡日が1つだけの場合、YAGNIはオプション1を使用することをお勧めします。オプション1に対して実際の技術的な理由がある場合(迷信的な感覚がない場合)のみ、最終連絡日が1つだけ必要な場合はオプション2を使用してください。オプション2 Contact
が日付だけでなく、いくつかの属性を持つエンティティになり、それ自体を抽象化として使用する場合も問題ありません。
また、ここではパフォーマンスはおそらく非常に重要ではないので、連絡日1年に1回を顧客ごとに個別に記録しても、問題が発生することはありません。