数据库设计:私人聊天,群聊和电子邮件

Sta*_*bie 12 mysql database database-design

Facebook用户之间的沟通似乎存储在一个长期的"对话"中.因此,发送的电子邮件和所交换的私人聊天消息似乎都是长时间持续对话的一部分.

我认为这个实现适用于用户(至少对我而言).我假设这部分的表设计可以这样实现:

TABLE: message
 - message_id
 - timestamp
 - from_user_id
 - to_user_id
 - message
Run Code Online (Sandbox Code Playgroud)

如果我想支持群聊怎么办?我会做这样的事情:

TABLE: message
 - message_id
 - timestamp
 - from_user_id
 - message

TABLE: message_recipient

 - message_recipient_id
 - message_id
 - to_user_id
Run Code Online (Sandbox Code Playgroud)

我认为它会起作用.但是,我想知道如果我在一次长谈话中显示用户曾经向任何人发送的每一件事情,对用户是否有意义.它可能不会.想象一下与人A的对话与人A,B,C,D混合与人E的对话混合,等等....

关于什么是可用的概念实施的任何建议?

Dvi*_*lay 7

我相信一个消息应该是一个实体,不管是什么平台或发送器/接收器,用id,message,timestamp域和消息关系表-像你这样的建议-有id,message_id,from_id,to_id.然后,如果您向用户对话显示单个用户,则可以显示它们之间的每条消息.对于群聊,你应该有一个表id,title,timestamp保存群组聊天主记录,并认为是群聊的部分用户,与另一个表id,group_chat_id,user_id的字段.

只是我的意见以及我将如何实施它.

编辑:也许from_id在消息实体本身上有意义,因为消息必须具有单个发送者ID.