【发布时间】:2017-10-20 21:50:50
【问题描述】:
我正在构建一个非常简单的聊天应用程序,它允许一对一的消息和多人聊天室。我打算有一个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
...
这似乎有点多余,但这样大卫可以在他与琳达的对话中删除一条消息,而琳达仍然可以看到完整的对话历史记录。
桌子有更好的设计吗?将所有聊天消息放在一张大桌子上是一种好习惯吗?我应该添加一些索引以使查询更快吗?
【问题讨论】:
-
当你的表变大时,
OR会非常慢。在此论坛中搜索“聊天”以查看其他人在做什么。
标签: mysql database-design