集体网络聊天

时间:2012-08-27 14:10:15

标签: sql-server database schema

我需要开发一个具有一个“高级”功能的网络聊天:分组聊天 - 就像Skype的聊天系统一样。

这个理论很简单,但在实践中却很难。自上周五以来我一直在考虑这个问题,但我不知道如何应用这种架构。基本上我需要一个具有良好结构的数据库设计而没有存储冗余。

好的......到目前为止看起来很简单,但现在我将介绍我们的主要功能:用户的历史。

我可以与2个用户创建一个聊天。好的,两天过去了,我想添加第三个用户加入对话。聊天对他的历史将有所不同:他将无法在该聊天中查看旧消息。

很好,对吧?请记住,朋友:我不能使用XML在本地存储历史记录。我需要用户SQL数据库。就我而言,我正在使用Microsoft的SQL-Server。

你们都能理解我的问题吗?如果是的话,不是微不足道的,是吧?好。谁能想到我怎么能解决这个问题?我疯了!

3 个答案:

答案 0 :(得分:3)

实际上问题 是微不足道的。将其存储在XML中将是真正的问题。

  • 用户(UserId,姓名)
  • 聊天(ChatId,ChatName)
  • ChatParticipation(ChatParticipationId,UserId,JoinChatMessageId,LeaveMessageId)
  • ChatMessages(ChatMessageId,ChatId,UserId,Message)

通过添加ChatParticipation表,您将确切知道用​​户加入聊天的ChatMessageId是哪个(JoinChatMessageId),并且不会在消息之前向他显示消息。 LeaveMessageId可以跟踪他何时离开聊天室。可以将多个加入/离开建模为单独的参与。

答案 1 :(得分:1)

你还没有说过什么语言(PHP等)..所以它有点难,但是,如果我从PHP的角度创建这个,我会根据id的聊天。 www.site.com/chat.php?id={id}然后有办法相应地接受/拒绝用户。

  

我可以与2个用户创建一个聊天。好的,两天过去了,我想添加第三个用户加入对话。聊天对他的历史将有所不同:他将无法在该聊天中查看旧消息。

为什么不给每条消息一个日期和时间,然后当用户成员进入聊天时,他们只能看到这个日期/时间的消息?这可以在理论上起作用。

所以,如果我今天下午15:20加入聊天,那么我只能在15:21或之后看到消息。

您的主要问题是实时显示消息,因为它是一个Web应用程序..

祝你好运!

答案 2 :(得分:1)

我不确定,我是否正确理解你的问题。

据我所知,你需要4个表: user(userid,username), 对话(conversationid,conversationtitle), user_conversation(userid,conversationid) 发布(userid,conversationid,text)

用户存储系统中注册的所有用户。对话存储所有对话。 user_conversation将用户映射到允许进入的对话。帖子存储用户在某个对话中发布的帖子。

现在,您可以简单地通过用户,通过对话或两者来检索数据。如果您不希望用户查看较旧的帖子,请添加日期字段。

此致

路易