多くの Web サイトには、ユーザーからユーザーへメッセージを送信するという概念があります。別のユーザーにメッセージを送信すると、そのメッセージは受信トレイに表示されます。メッセージに応答すると、そのメッセージ スレッドに新しいエントリとして表示されます。
特定のメッセージを既に読んだかどうかを確認できる必要があり、新しい応答を受け取ったメッセージが一番上に表示されるはずです。
そのようなシステムをサポートするクラス (またはテーブルなど) をどのように設計しますか?
多くの Web サイトには、ユーザーからユーザーへメッセージを送信するという概念があります。別のユーザーにメッセージを送信すると、そのメッセージは受信トレイに表示されます。メッセージに応答すると、そのメッセージ スレッドに新しいエントリとして表示されます。
特定のメッセージを既に読んだかどうかを確認できる必要があり、新しい応答を受け取ったメッセージが一番上に表示されるはずです。
そのようなシステムをサポートするクラス (またはテーブルなど) をどのように設計しますか?
メッセージが 1 回だけ保存されるバルク メッセージをサポートするために、Owen のスキーマを拡張することをお勧めします。また、送信者が 1 つだけで、受信者が多数になるように変更されました (この方式では、送信者は 1 つしか存在しません)。
ユーザー ID 名前 メッセージ ID 受信者 ID content_id date_time_sent date_time_read response_to_message_id (これが返信する電子メールを参照します - スレッド) 期限切れ 重要性 フラグ (読み取り、応答の読み取りなど) コンテンツ ID message_id 送信者 ID 題名 メッセージ
もちろん、他にも追加できる機能はたくさんありますが、ほとんどの人は「メール」と聞いて上記の機能を思い浮かべます。
-アダム
user
id
name
messages
id
to_user_id
from_user_id
title
date
message_post
id
message_id
user_id
message
date
クラスはこの種のスキーマを反映します
かなりシンプルなテーブル構造です。to/from、件名、そしてメッセージ。ここで重要なのは日付フィールドです。DateSent はメッセージがいつ送信されたかを示し、DateRead はメッセージが読まれたことを示し、DateDeletedTo は TO ユーザーがメッセージを削除したことを示し、DateDeletedFROM は FROM ユーザーがメッセージを削除したことを示します (これらはこの例の論理的な削除です)。
tblMessage
ID BIGINT
ToUserID GUID/BIGINT
FromUserID GUID/BIGINT
Subject NVARCHAR(150)
Message NVARCHAR(Max)
DateDeletedFrom DATETIME
DateDeletedTo DATETIME
DateSent DATETIME
DateRead DATETIME
私は実際に、職場での内部開発の一環としてこれを行っています。[Messages] というテーブルを作成し、次の列を指定します。
そのようなものがテーブルのデザインで機能するはずです。クラスは、設計しているシステムによって異なります。
Table Message:
id INTEGER
recipient_id INTEGER -- FK to users table
sender_id INTEGER -- ditto
subject VARCHAR
body TEXT
Table Thread
parent_id -- FK to message table
child_id -- FK to message table
その後、Thread テーブルを調べて、メッセージのスレッドを取得できます。