消息系统数据库架构

4

我正在尝试在PHP和MySQL中实现一个消息系统,但我无法确定应该如何设计表格和查询语句。

对于允许多个参与者的系统,最好的方法是什么?我认为我可能需要三个表格(除了用户表)。

类似这样:

Conversation
------------
id

Messages
--------
id
conversation_id
from_id
subject
message
from_timestamp

Participants
------------
conversation_id
user_id
last_read_timestamp

按照目前的设置,我需要通过时间戳来检查已读消息,而不是逐条标记每条消息。此外,我随时都可以添加参与者。

你们觉得怎么样?

谢谢您的帮助。


@ChrisWalton - 'from_id' 应该是消息发送者的用户ID。许多参与者可能属于一次对话,但一条消息只能属于一个参与者(或前参与者-仍在考虑如何实现)。所有对话参与者都可以看到与其相关的消息。干杯 - RS7
1
我认为from_id是作者的用户ID。如果我理解正确,“participants”表将对话链接到用户表(此处未显示),并存储用户上次阅读此对话的时间。 - Jad
很想看看你是如何解决一个参与者的问题的!这是我所见过的较好的表格模式之一。 - Ian McCullough
2个回答

4

我没有太多可以抱怨的 :) 我可能会在对话表上缓存最后修改日期,以便快速显示“未读”对话列表。每次在对话中发布消息时,将更新此日期。


1
我会把主题字段放在对话表上。在每个单独的消息上都放置它看起来很冗余。 此外,我会将对话的创建时间和作者用户ID保存在其表中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接