从数据库中删除特定用户的聊天记录

时间:2014-08-28 08:00:58

标签: sql database

我目前正在使用SignleRSQL server开发网络聊天应用程序这是我目前的数据库架构

enter image description here

我添加了一个用户可以Clear Chat history进行特定会话的选项,但是如果用户1点击清除历史记录,我在为特定用户清除历史记录时遇到问题{1}}

如何升级数据库架构以便我可以使用此功能?

1 个答案:

答案 0 :(得分:0)

我认为您需要的是一个将多个用户与消息连接起来的复合密钥表。我还认为你缺少CONVERSATION表,它会将多条消息加入到特定的会话中。

拟议方案:

USERS          USER_THREADS      THREADS            MESSAGES
User_ID   ->      User_ID          
                 Thread_ID  ->  Thread_ID
                                Message_ID  ->      Message_ID

现在要清除单个用户的对话,您需要从USER_THREADS表中删除该User_ID和Thread_ID的记录。

上述方案还允许在两个以上的人之间进行对话,因为THREAD可以通过以下SELECT语句拥有许多用户:

回复您的评论:

修改MESSAGE表:

您不需要MESSAGE_SENDER_IDMESSAGE_RECIEVER_ID,因为这些信息将由USER_THREADS表标识。 修改 您应该将MESSAGE_SENDER_ID保留在MESSAGE表中,以便识别发送邮件的用户。

假设当用户登录您的应用程序时,将从USER_THREADS表中获取所有对话。

select  *
from          USER_THREADS as ut
inner join    THREADS as t on ut.Thread_ID = t.Thread_ID
inner join    MESSAGES  m on m.Message_ID = t.Message_ID
where         USER_THREADS.User_ID = 001

SQL INSERT语句:

当用户写入消息时,应用程序应将消息正文插入带有自动ID的MESSAGES表中,然后Message_ID将被下一个insert语句用于在THREADS表中创建新记录。您没有提到您的DBMS,但在MSSQL中,SQL语句看起来像:

DECLARE @message_id int
insert into MESSAGES values (‘message body’)

set @message_id  = SCOPE_IDENTITY() -–an id of the newly inserted message

insert into THREADS values (@message_id, @thread_id)

用于清除单个用户的历史记录的SQL语法:

delete from USER_THREADS where User_ID = 0000 AND Thread_ID = 0000

这将删除该用户的整个帖子