删除聊天记录从数据库

问题描述:

我目前正在开发使用SignleRSQL server一个网络聊天应用程序的特定用户,这是我的数据库架构到目前为止删除聊天记录从数据库

enter image description here

我增加了一个选项,其中用户可以Clear Chat history特定的谈话,但我有与清算历史的愿望的情况下特定用户的概念麻烦,如果用户1击清除历史记录all the messages of this conversation will not be displayed for user 1 but will still be seen for user-2

如何升级我的数据库架构,所以我可以做这个泛函可爱吗?

+0

'users.user_id'是否映射到'messages.message_sender_id'和'message_receiver_id'? – 2014-08-28 09:03:03

+0

是@KevinHogg他们做的:) – Sora 2014-08-28 09:11:58

我认为你需要的是一个复合密钥表连接多个用户与消息。我也认为你错过了CONVERSATION表,它会将多条消息加入到特定的对话中。

所提出的方案:

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

我们清除您需要从USER_THREADS表中删除记录为USER_ID和THREAD_ID个人用户进行对话。

上述方案还允许携带两个以上的人之间的对话作为线程可以通过下面的SELECT语句有许多用户:

回应您的评论:

修改的MESSAGE表:

您不需要MESSAGE_SENDER_IDMESSAGE_RECIEVER_ID,因为这些信息将通过USER_THREADS表进行标识。 编辑: 您应该保留在MESSAGEMESSAGE_SENDER_ID为了识别发送消息的用户。

假设用户登录到您的应用程序将获得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,这与Message_ID将随后被下一个插入语句来创建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 

这将删除整个该用户的线程

+0

1 - 是否有消息表的任何修改 2 - 如果我想插入一条消息让说user1发送消息给user2什么将是插入语句 – Sora 2014-08-28 08:29:56

+0

我怎样才能选择一个会话在用户1和用户2之间 – Sora 2014-08-28 08:55:09

+0

@Sora请参阅我的更新回答 – Dimt 2014-08-28 08:57:27