2012-10-31 10 views
5

小さなメール/メッセージ送信データベーススキーマを作成しています。これは、メールシステムをactuallされていませんが、ソートのメッセージングポータルは、次の使用例で、組織をwithing:単純な電子メール/メッセージングデータベーススキーマの作成

  1. 従業員がお互い
  2. 従業員にメッセージを送ることができ、すべての従業員にメッセージをbrodcastでき
  3. 従業員することができます返信されたメッセージに返信する
  4. 従業員は、返信したメールを受信トレイの「タイムスタンプ」列に表示することができます(つまり、受信トレイに返信された列にはこのメールが返信された時のタイムスタンプ、それがなければ空でなければならない)
  5. 特定のメッセージを開くと、メッセージのスレッド表示が表示され、最新のメッセージが表示されます。

私の質問 特定のメッセージが任意のメッセージへの返信であれば、私はトラッキングするにはどうすればよい、電子メールで、私はそれがヘッダに埋め込まれていると信じています。それは返信である別のメッセージを指している '返信' IDフィールドを保持していますか?

スレッドまたはチェーンを作成するにはどうすればよいですか?

+0

私は[この] [1]質問への答えに勤務し、その最高の [1]:http://stackoverflow.com/questions/6541302/thread-messaging-system-database-スキーマデザイン – shabby

答えて

6

元のメールを指すフィールドをデータベーステーブルに保持します。各電子メールには前任者(または「父」)が1つしかないのに対し、電子メールには後任者(または「息子」)が1つもないことがあります。したがって、前任者の記録を維持することが最善です。

これは、スレッドまたはチェーンを作成する方法でもあります。スレッドの最初のメッセージの「father」フィールドは0になりますが、後でメッセージにはこのフィールドに他の値が含まれます。 「スレッド」または「会話」と呼ばれるフィールドを維持すると、どのメッセージがどのスレッドに接続されているかを簡単に知ることができます。

興味深い部分は、チェーンにリンクをどのように格納するのではなく、チェーンをどのようにトラバースするかです。続き

は、1つのメッセージは多くの人に送ることができるような単純なデータスキーマ

USERS 
id - autoinc 
name - varchar 

THREADS 
id - autoinc 
name - varchar 

STATUSES 
id - autoinc 
name - varchar 

MESSAGES 
msg_id - autoinc 
from_id (fk to users table) - int 
datesent - date 
thread (fk to threads table) - int 
father (pointer to previous message in this thread) - int 
text - varchar 

RECIPIENTS 
id - autoinc 
msg_id (fk to messages table) - int 
to_id (fk to users table) - int 
status (fk to statuses table) - int 
dateread - date 

で、MESSAGE者と受信者の間に1対多の関係が存在します。それぞれの受信者は異なる時刻にメッセージを読み、別のステータス(未読、読み込み、削除、未読の削除など)を持ちます。

+0

しかし、いくつのテーブル?どのようなテーブル構造ですか? – shabby

+0

あなたはどれくらいあなた自身で持っていますか? –

+0

私はすべてのメール/メッセージに受信者を追加する方法に問題がありました。受信者がすべてのメールではなく、スレッドに関連付けられていることがわかりました。助けてくれてありがとう – shabby

関連する問題