聊天数据库模型

时间:2015-01-06 09:49:26

标签: database database-design

我正致力于在Spring-MVC中实现聊天功能。这仅适用于私人聊天。现在有一种情况我有两个正在聊天的用户。我想将他们的聊天记录存储在数据库中。我正在考虑如何保存它以便我能够以有效的方式搜索两个用户之间的对话。

目前我的想法是:

每条消息都有一个messageid,messageTimeStamp,messageText和一个标识符。现在,此标识符是user1:user2的String值。因此,当我想在两个用户之间加载对话时,我有一个登录的user1,因此我可以在数据库中搜索标识符user1存在并将其作为历史记录加载。

问题是加载单个聊天记录和开销。这种方法听起来不错,欢迎任何建议。谢谢。

1 个答案:

答案 0 :(得分:4)

我认为您的想法对于开始并不是那么糟糕,但使用标识符列,您在字符串值'user1:user2'中合并聊天用户并不是很有效。稍后您必须使用字符串操作,并且不能单独索引消息的发送者和接收者。 您可以将发件人和收件人的用户ID存储在不同的列中。

您可能考虑的另一件事是使用单独的“对话”或“聊天”表来存储用户之间的对话关系数据。然后,您从消息表中引用对话。所以你的表可能看起来像:

  • 对话(id,user1,user2,时间)
  • 消息(id,发件人,conversation_id,文本,时间)

一个好处是,当您只想操作对话时,例如计算或获取用户之间的活动对话列表,这样会更有效。

您可以找到更多示例,详细说明此类设计here