Sql 从数据库中删除特定用户的聊天历史记录
我目前正在使用Sql 从数据库中删除特定用户的聊天历史记录,sql,database,Sql,Database,我目前正在使用SignleR和sqlserver开发一个web聊天应用程序,这是我目前的数据库模式 我添加了一个选项,用户可以清除特定对话的聊天历史记录,但是,如果用户1点击clear history,我在为特定用户清除历史记录这一概念上遇到了问题。对于用户1,此对话的所有消息都不会显示,但是对于用户2,仍会看到此对话的所有消息 如何升级数据库架构以实现此功能?我认为您需要的是一个组合键表,它将多个用户与消息连接起来。我还认为您缺少将多条消息连接到特定对话的对话表 拟议计划: USERS
SignleR
和sqlserver
开发一个web聊天应用程序,这是我目前的数据库模式
我添加了一个选项,用户可以清除特定对话的聊天历史记录
,但是,如果用户1点击clear history,我在为特定用户清除历史记录这一概念上遇到了问题。对于用户1,此对话的所有消息都不会显示,但是对于用户2,仍会看到此对话的所有消息
如何升级数据库架构以实现此功能?我认为您需要的是一个组合键表,它将多个用户与消息连接起来。我还认为您缺少将多条消息连接到特定对话的对话表
拟议计划:
USERS USER_THREADS THREADS MESSAGES
User_ID -> User_ID
Thread_ID -> Thread_ID
Message_ID -> Message_ID
现在,要清除单个用户的对话,您需要从user_THREADS表中删除该用户ID和Thread_ID的记录
上述方案还允许在两个以上的人之间进行对话,因为通过下面的SELECT语句,线程可以有多个用户:
回复您的评论:
delete from USER_THREADS where User_ID = 0000 AND Thread_ID = 0000
对消息表的修改:
delete from USER_THREADS where User_ID = 0000 AND Thread_ID = 0000
您不需要MESSAGE\u SENDER\u ID
和MESSAGE\u receiver\u ID
,因为这些信息将由USER\u THREADS
表标识编辑:
您应该在消息
表中保留消息\u发送者\u ID
,以识别发送消息的用户
假设当用户登录到应用程序时,将从user\u 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插入语句:
delete from USER_THREADS where User_ID = 0000 AND Thread_ID = 0000
当用户写入消息时,应用程序应使用自动ID将消息正文插入到消息表中,然后下一个insert语句将使用该消息\u 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
这将删除该用户的整个线程1-消息表2是否有任何修改-如果我想插入消息,让我们假设user1向user2发送了消息,插入语句将是什么样的insert语句如何选择用户1和用户2之间的对话我看到了更新,但在您的insert语句中您没有使用User\u-thread
表,如果user1正在与User2开始新的对话,我是否应该在该表中插入一行?@Sora是的,当对话不存在时,应在User\u-threads
表中创建一条新记录。其他问题,如果我省略了messages表中的两列,那么在您的模式中,发送者和接收者之间如何保持一致?是否用户.user\u id
映射到消息。消息\u发送者\u id
和消息\u接收者\u id
?是@KevinHogg他们确实:)