4

Facebookと同じように会話を処理するメッセージングシステムを構築したいと考えています。テーブルの構造に関して、それを行うための最良の方法は何でしょうか。次のようなテーブルが1つありますか?

id
reply_id-会話を開始した元のメッセージのID
to_id
from_id
主題
コンテンツ
date_sent
read_status

または2つのテーブル:

表1-新しいメッセージの開始用

id
to_id
from_id
主題
コンテンツ
date_sent
read_status

表2-誰かがメッセージに返信したとき

id
message_id
to_id
from_id
主題
コンテンツ
date_sent
read_status
4

3 に答える 3

3

これは多くのことに依存しますが、最初の推測では、「メッセージ」の自己参照テーブルになる可能性があります。例えば:

message:
  sender_id: User
  recipient_id: User
  in_reply_to_id: Message
  subject, content, etc

メッセージは次のようになります。

  belongs_to :sender, :class => 'User'
  belongs_to :recipient, :class => 'User'
  has_many :replies, :dependent => :destroy
  belongs_to :in_reply_to, :class => 'Message'

これにより、返信のツリーを構築できます (メッセージがメッセージに in_reply_to である可能性があり、そのメッセージがさらに別のメッセージに in_reply_to である可能性があるため)。柔軟性と制御を高めるために、acts_as_ordered_treeなどの使用を検討することもできます。

于 2012-07-01T19:20:26.913 に答える
2

私は1つのテーブルを言うでしょう。同一のデータを複製する理由 さらに、他のテーブルが最初のテーブルと同一であることを気にする必要がないため、メッセージ データ構造が変更された場合のエラーの原因を取り除くことができます。

于 2012-07-01T19:16:30.117 に答える
-5

本当の最良の答えは次のとおりです。MySQL は、電子メールおよびチャット タイプのシステムを構築するための非常に貧弱なツールです。

メッセージング システムは既に存在します。チャットシステムは既に存在します。なぜ車輪を再発明しようとしているのですか?

于 2012-07-01T19:50:57.150 に答える