4

我正在寻找一个消息系统来处理对话,就像 Facebook 的做法一样。我想知道关于表结构的最佳方法是什么。我会有一张像这样的桌子吗:

ID
reply_id - 开始对话的原始消息的 id
to_id
from_id
学科
内容
发送日期
读取状态

或两张表:

表 1 - 新消息的开始

ID
to_id
from_id
学科
内容
发送日期
读取状态

表 2 - 当有人回复消息时

ID
message_id
to_id
from_id
学科
内容
发送日期
读取状态
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

我会说一张桌子。为什么要重复相同的数据?此外,当您的消息数据结构发生更改时,您将消除错误源,而不必关心另一个表与第一个表相同。

于 2012-07-01T19:16:30.117 回答
-5

真正的最佳答案是:MySQL 是构建电子邮件和聊天类型系统的极差工具。

消息系统已经存在。聊天系统已经存在。你为什么要重新发明轮子?

于 2012-07-01T19:50:57.150 回答