我建议以下数据库设计:
MESSAGES
+----------+------------------+---------------------------+
| id | subject_id | body |
+----------+------------------+---------------------------+
SUBJECTS
+----------+-------------+--------------+-----------------+
| id | title | author | receivers |
+----------+-------------+--------------+-----------------+
INBOX
+----------+---------------+--------------+---------------+
| id | user_id | msg_id | read |
+----------+---------------+--------------+---------------+
OUTBOX
+----------+---------------+------------------------------+
| id | user_id | subject_id |
+----------+---------------+------------------------------+
当您发送消息时,您会在收件箱表中为所有接收者创建一个新行,并在发件箱表中为发件人创建一个新行。在消息表中插入一行,其中包含主题 ID 和消息正文。在主题表中插入一行标题、作者和所有接收者(如果发件人开始新主题或转发完整对话或单个消息,否则使用现有主题 ID 在消息表中添加消息),这样即使其中一位接收者从他/她的收件箱中删除了一条消息(在这种情况下删除收件箱表中的行),也会保留信息。
对于发件箱,不需要“已读”标志,请注意仅使用主题 ID。