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

Sor*_*ora 4 database-design sql-server

我目前正在开发一个网络聊天应用程序SignleRSQL 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

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

PS:昨天我问了同样的问题stackoverflow website,有人给了我一个解决方案。但他给我的解决方案很复杂,并没有满足我的要求。我的数据库目前仅支持 2 个用户之间的私人聊天

blo*_*les 5

一种简单的方法是在 Messages 表中创建一个名为 的新字段MESSAGE_VISIBLE_TO。此字段应与USER_ID字段具有相同的类型并具有默认的 NULL 值。当 User1 点击“Clear History”按钮时,应用程序需要一些逻辑来更新两个人之间的所有消息,将 设置MESSAGE_VISIBLE_TO为 User2 的 ID。类似的东西(同时传入USER_IDUser1 和 User2):

UPDATE Messages
SET MESSAGE_VISIBLE_TO = @UserID2
WHERE MESSAGE_SENDER_ID = @UserID1 AND MESSAGE_SENDER_ID = @UserID2
Run Code Online (Sandbox Code Playgroud)

MESSAGE_VISIBLE_TO字段可能有 4 种可能的“状态”:

  • NULL = 默认值,两个用户都可以看到消息
  • -1 = 两个用户都看不到消息
  • UserID1 = User1 ONLY 可以看到消息
  • UserID2 = User2 ONLY 可以看到消息

应用程序需要在数据库级别(可能更可取,因为您不需要发送超过所需的数据)或在应用程序级别(简单地隐藏用户不需要的消息)将逻辑合并到 UPDATE 和 SELECT 消息应该会看到)。

如果您希望最终升级应用程序以支持 2 人以上的聊天,则您的方法需要有所不同。您需要在用户和消息表之间创建另一个表。您可以将表命名为“MessageStatus”,包括以下字段:

USER_ID
MESSAGE_ID
VISIBLE (bit)
Run Code Online (Sandbox Code Playgroud)

然后该表将通过VISIBLE位字段的值识别哪些用户可以看到哪些消息。