用户消息系统

时间:2011-01-19 19:37:23

标签: php mysql

我正在寻找创建用户消息系统(类似于Facebook)。

我想知道的是桌面结构应该是什么样的?我的要求如下:

  • 邮件在用户之间交换 - 发件人可以选择多个用户发送邮件。

  • 消息以线程样式布局显示,作为1-1对话。即每个收件人的回复都会出现在自己的帖子中。

  • 无法删除单个邮件,但可以删除某个邮件。删除线程不会删除任何消息,只是从用户的收件箱中删除该线程。但是,如果他/她没有从他/她的收件箱中删除该帖子,则其他用户仍然可以访问该帖子。

这就是我现在所拥有的:

Table messages
==============
id (PK)
user_id (from)
subject
body
sent_at


Table message_recipients
========================
message_id (PK)
user_id (PK)
read_status

编辑:以下内容如何:

Table messages
==============
id (PK)
thread_id   
user_id (from)
body
sent_at


Table threads
=============
id (PK)
user_id (from)
subject


Table thread_recipients
=======================
thread_id (PK)
user_id (PK)
read_status
sender_deleted
recipient_deleted

3 个答案:

答案 0 :(得分:4)

我建议至少遵守以下规定:

用户,主题,消息

  • 所有邮件都有一个帖子
    • 外键:thread_id
  • 所有主题至少有一条消息和至少一个收件人(以及发件人)
    • 外键:to_user_id,from_user_id,message_id

从那里你可以简单地为你的线程(to_user_deleted,from_user_deleted)分配一些标志,这些标志将相应地更新。

当然还有很多事情需要考虑,比如你想要考虑什么样的事情。例如:

  • 是否要显示当前消息而不是启动消息?
  • 您是否希望允许用户将单个邮件标记为已读或仅标记线程?

在设计数据库时,您需要考虑所有这些因素。

答案 1 :(得分:0)

为什么不使用像Jabber这样的东西(例如:OpenFireWeb Client

如果你需要PHP与它进行交互,你可以使用类似的东西:

http://code.google.com/p/xmpphp/http://code.google.com/p/jaxl/

答案 2 :(得分:0)

@Angelo R.想知道为什么我们需要线程表?这不是任何讨论板。如果要检索消息的整个线程/对话,只需按源和收件人ID进行查询即可。 另外,如果你使用Thread,没什么不好的。但在这种情况下是什么 如果是新消息 - 新thread_id(自动创建),如果回复现有会话,则您拥有thread_id,但如果您正在创建新消息(比如facebook popup),您不知道以前是否有任何会话或如果thread_id可用或不可用,除非您对它执行特殊查询。 这是我的想法。告诉我,我在某处可能是错的。