我正在寻找一个消息系统来处理对话,就像 Facebook 的做法一样。我想知道关于表结构的最佳方法是什么。我会有一张像这样的桌子吗:
ID reply_id - 开始对话的原始消息的 id to_id from_id 学科 内容 发送日期 读取状态
或两张表:
表 1 - 新消息的开始 ID to_id from_id 学科 内容 发送日期 读取状态 表 2 - 当有人回复消息时 ID message_id to_id from_id 学科 内容 发送日期 读取状态
我正在寻找一个消息系统来处理对话,就像 Facebook 的做法一样。我想知道关于表结构的最佳方法是什么。我会有一张像这样的桌子吗:
ID reply_id - 开始对话的原始消息的 id to_id from_id 学科 内容 发送日期 读取状态
或两张表:
表 1 - 新消息的开始 ID to_id from_id 学科 内容 发送日期 读取状态 表 2 - 当有人回复消息时 ID message_id to_id from_id 学科 内容 发送日期 读取状态
这取决于很多事情,但初步猜测可能是“消息”的自引用表。例如:
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的东西来获得更大的灵活性和控制力。
我会说一张桌子。为什么要重复相同的数据?此外,当您的消息数据结构发生更改时,您将消除错误源,而不必关心另一个表与第一个表相同。
真正的最佳答案是:MySQL 是构建电子邮件和聊天类型系统的极差工具。
消息系统已经存在。聊天系统已经存在。你为什么要重新发明轮子?