Php 用户信息系统

Php 用户信息系统,php,mysql,Php,Mysql,我正在考虑创建一个用户消息系统(类似于Facebook) 我想知道的基本上是表结构应该是什么样的?我的要求如下: 消息在用户之间交换-发件人可以选择多个用户向其发送消息 消息以线程样式的布局显示为1-1对话。i、 e.每个收件人的回复将出现在自己的帖子中 无法删除单个邮件,但可以删除线程。删除线程不会删除任何消息,它只是将该线程从用户的收件箱中删除。但是,如果其他用户没有从收件箱中删除该线程,则仍然可以访问该线程 以下是我目前的情况: Table messages =============

我正在考虑创建一个用户消息系统(类似于Facebook)

我想知道的基本上是表结构应该是什么样的?我的要求如下:

  • 消息在用户之间交换-发件人可以选择多个用户向其发送消息

  • 消息以线程样式的布局显示为1-1对话。i、 e.每个收件人的回复将出现在自己的帖子中

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

以下是我目前的情况:

Table messages ============== id (PK) user_id (from) subject body sent_at Table message_recipients ======================== message_id (PK) user_id (PK) read_status 表消息 ============== id(主键) 用户id(来自) 主题 身体 寄往 表邮件收件人 ======================== 消息id(主键) 用户id(主键) 读取状态 编辑:以下内容如何:

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 表消息 ============== id(主键) 线程id 用户id(来自) 身体 寄往 表线程 ============= id(主键) 用户id(来自) 主题 表线程\u收件人 ======================= 线程id(主键) 用户id(主键) 读取状态 已删除发件人 收件人(u)已删除
为什么不使用像Jabber这样的语言(例如:or)

如果您需要PHP与之交互,可以使用以下内容:


或者

我建议至少具备以下条件:

用户、线程、消息

  • 所有消息都会有一个线程
    • 外键:线程id
  • 所有线程都至少有一条消息和一个收件人(以及发件人)
    • 外键:to_user_id、from_user_id、message_id
从那里,您可以简单地为您的线程(to_user_deleted,From_user_deleted)分配几个标志,这些标志将相应地更新

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

  • 是否要显示当前消息而不是起始消息
  • 您想允许用户将单个消息标记为已读,还是仅标记为线程

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

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

可能有更多的信息无法提供。我认为没有人会完全为您设计数据库(至少不是免费的)。为什么不告诉我们你的想法,这样我们就可以发表意见。@Dutchie432-我不是要求完整的数据库设计-我只是需要一些指导。消息传递系统只是我现有系统的一个模块,即我已经有一个用户表。无论如何,我已经更新了我的问题。看起来他正试图设计一个私人信息系统,而不是一个实际的现场聊天。感谢Angelo的回复-非常感谢。我不知道你所说的“你想显示当前消息而不是起始消息”是什么意思——因为它是基于线程的布局,所以它会显示我认为所有的消息。关于是否将单个消息或线程标记为已读,我认为应该是实际的线程。所以在线程表中可能有一个“read_status”标志。别忘了,每个用户都需要一个read_状态。另外,我的意思是,当你给用户一个他们信息的概述(如果你打算给他们一个),你会显示第一条信息的摘录还是最近的一条?想象一下一个网络邮件界面,在那里他们会给你一些邮件中的信息摘录。这是一种你不需要拥有的东西,但这是一种需要思考的东西。干杯。请查看我的最新编辑,并告诉我您的想法。您认为初始消息是否应包含在“线程”表中?这样,如果将同一封邮件发送给多个收件人,则不需要为每个收件人创建单独的邮件。