在MySQL DB中保存聊天消息,方案设计

时间:2017-05-21 02:12:59

标签: mysql database-design

我正在构建一个非常简单的聊天应用程序,它允许一对一的消息和聊天室供一群人使用。我计划有一个Message表来存储所有聊天消息,每条消息还会保留发件人ID和接收者ID,如果在聊天室发送消息,我们还会保留该聊天室的ID。以下是表格:

Message Table

ID      Message               Sender       Receiver    Chatroom    Timestamp      
1       Hello, David          123          321                     1495330074
2       Hi, Linda             321          123                     1495930032
3       Hi everyone!          456                       999        1495930132
4       What up?              321          123                     1495930192

...

然后,如果我是用户321,并且我想要检索与用户123的对话,我只需要SELECT * FROM Message WHERE Sender=123 or Receiver=123 or Sender=321 or Receiver=321 and Chatroom IS NULL

此设计存在一个问题 - 用户无法删除他不想再看到的消息。

要解决这个问题,我想我可以有一个单独的表来存储用户收到或发送的消息,如下所示:

User Message Table

ID      UserID               MessageID               
1       123                   1                    
2       321                   1
3       321                   4
...

这似乎有点多余,但这样David可以在与Linda的对话中删除一条消息,而Linda仍然可以看到完整的对话历史记录。

表有更好的设计吗?将所有聊天消息放在一个巨大的表中是一种好的做法吗?我应该添加一些索引来加快查询速度吗?

1 个答案:

答案 0 :(得分:0)

您可以使用此查询。

delete from Message
where sender = 123 and user = 321

但这会删除此用户与发件人之间的所有聊天消息。要删除特定消息,您可以使用ID

从消息中删除 其中ID = 1