删除聊天记录从数据库
我目前正在开发使用SignleR
和SQL server
一个网络聊天应用程序的特定用户,这是我的数据库架构到目前为止删除聊天记录从数据库
我增加了一个选项,其中用户可以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
如何升级我的数据库架构,所以我可以做这个泛函可爱吗?
我认为你需要的是一个复合密钥表连接多个用户与消息。我也认为你错过了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_ID
和MESSAGE_RECIEVER_ID
,因为这些信息将通过USER_THREADS
表进行标识。 编辑: 您应该保留在MESSAGE
表MESSAGE_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
这将删除整个该用户的线程
'users.user_id'是否映射到'messages.message_sender_id'和'message_receiver_id'? – 2014-08-28 09:03:03
是@KevinHogg他们做的:) – Sora 2014-08-28 09:11:58