企業向けのテクニカル サポート用の Twitter ベースのアプリケーションを開発しています。
ワークフローはこのようなものです
1- Twitter ユーザーが会社についてメンションします。
2- 管理者に通知されます。
3- お客様との DM の使用を開始します。
そのため、最適な ER モデルについて少し混乱しています。
何千ものレコードを取得するために、ツイートと DM を同じテーブルに保存する必要がありますか、それとも別々にする必要がありますか?
企業向けのテクニカル サポート用の Twitter ベースのアプリケーションを開発しています。
ワークフローはこのようなものです
1- Twitter ユーザーが会社についてメンションします。
2- 管理者に通知されます。
3- お客様との DM の使用を開始します。
そのため、最適な ER モデルについて少し混乱しています。
何千ものレコードを取得するために、ツイートと DM を同じテーブルに保存する必要がありますか、それとも別々にする必要がありますか?
モデルにはエンティティがほとんどありません。user_idは、ツイートを書き込んだユーザーのIDを意味します。
基本構造
Message (id, message, user_id, date etc)
User (id, name, employee_id?, etc)
言及された単一のアカウント
次に、言及が行われる可能性があるという事実があります。これはメッセージの属性であるため、次のような列を追加できます。アカウントを1つだけ持つ場合は、BOOLが言及されます。与えるだろう:
Message (id, message, user_id, date, BOOL mentioned, etc)
User (id, name, employee?, etc)
複数のアカウントについて言及することができます
別のフォームはより柔軟である可能性があります。言及したいアカウントを保存できるテーブルアカウントを追加します。
Account (id, name)
Message (id, message, user_id, date, INT account_mentioned, etc)
User (id, name, employee?, etc)
アカウントを追加して言及のフォローを開始できるため、柔軟性が向上します。たとえば、そのアカウントの管理者に通知して、ソリューションを将来にわたって利用できるようにすることができます。
従業員への対応方法
ワークフローに応じて、次のように言うことができます。従業員は、1つ以上のアカウントを処理するユーザーです。また、1つのアカウントが複数のユーザーによって管理されており、最後に複数のユーザーが複数のアカウントを管理している状況を示すこともできます。
本質的に、私は接続テーブルを作成することをお勧めします:
Accounts_Users (account_id, user_id)
たとえば、そのテーブルにロールを追加したり、優先度を追加したりすることもできます。これにより、アカウントを完全に制御できます。この部分についての情報が提供されていないので、私はそれを完全に説明することはできません。
DMと公開メッセージの保存
次に、DMの問題があります。これは、メッセージエンティティに最も簡単に追加できます。
Account (id, name)
Message (id, message, user_id, user_to_id (NULLABLE), date, INT account_mentioned_id, etc)
User (id, name, employee?, etc)
したがって、メッセージ(ツイート)のデフォルトでは、user_to_id列はNULLですが、DMの場合は、そこにレシーバーを追加します。そうすればあなたはそれらを見つけることができます。
なぜそれらすべてを1つのテーブルに入れるのですか?これは同じ属性を持つ同じエンティティであり、フラグ(プライベート)のみがありますが、本質的には同じデータです。
データ量
...この段階ではまったく関係ありません。本質的には、適切な構造が必要なだけなので、最初に正規化してください。パフォーマンスの問題が実際に発生した場合は、いくつかのステップを非正規化する方法を確認してください。ただし、単一の会社で使用する場合、この正規化された構造で問題が発生することはないと思います。
必要なデータを取得するために必要なのは通常の単純な結合だけです。正規化されているため、たとえば、正規化したために1人のユーザー(クライアント)とのすべての通信を表示するページを簡単に作成できます。この設定では、そのデータを簡単に取得できます。
数百万のツイートが処理されており、正規化するだけで問題ありません。データはそれほど大きくないので、多くの行は高価ではありません。
最終設定をお勧めします
私は今持っている情報に基づいてこのように行きます。
Account (id, name)
Accounts_Users (account_id, user_id)
Message (id, message, user_id, user_to_id (NULLABLE), date, account_mentioned_id, etc)
User (id, name, etc)