1

スレッド化されたメッセージング システムのテーブル構造について疑問に思っています。

私は3つのテーブルがあると考えています:

- message_thread
    - id
    - subject
- message_user
    - thread_id
    - user_id
    - thread_status (unread, read, trash, deleted)
- message
    - date (date sent)
    - sent_user_id
    - message

それぞれmessage_threadが message_thread に 1 つのレコードを持ちます。各ユーザーは、そのスレッドにmessage_user関連するレコードと、そのスレッドの読み取り/削除ステータスも保持します。(message_userさまざまなステータスがいつ発生したかに関するいくつかの日時フィールドも含まれる場合があります。) メッセージ テーブルには、メッセージ、メッセージを送信したユーザー、および時間が含まれます。

最終的に、システムは Facebook と同様に機能するか、Gmail のように見えます (ただし、電子メールに基づくものではありません)。

必須:

  • スレッドに 2 人以上のユーザーが関与している
  • 各ユーザーは、スレッドに対して独自の読み取り/削除ステータスを持っている必要があります

これはあなたがそれを設定した方法ですか?

4

2 に答える 2

2

1 つのテーブルを試してください。

messages
  id (INT)
  user_id (INT, ref to users table)
  subject (CHAR)
  parent_id (INT, ref to messages table, NULL if head of thread)
  content (TEXT),
  (other per-message attributes)

スレッド化が可能で、各メッセージに独自の件名を付けることができます。

既読ステータスを追加するには、ユーザーをメッセージにリンクする多対多テーブルを追加します。テーブル内のエントリは、ユーザーがそのメッセージを読んだことを意味します。

于 2009-02-09T00:33:27.450 に答える
0

user_id、thread_id、status_id、およびステータスが変更された日付を含むステータス ログ テーブルを追加します。

また、message テーブルと message_thread テーブルを組み合わせます。これらは 1 対 1 であり、組み合わせることができるようです。

于 2009-02-09T00:35:38.397 に答える