Sor*_*ora 4 database-design sql-server
我目前正在开发一个网络聊天应用程序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
如何升级我的数据库架构以便我可以使用此功能?
PS:昨天我问了同样的问题stackoverflow website,有人给了我一个解决方案。但他给我的解决方案很复杂,并没有满足我的要求。我的数据库目前仅支持 2 个用户之间的私人聊天
一种简单的方法是在 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 种可能的“状态”:
应用程序需要在数据库级别(可能更可取,因为您不需要发送超过所需的数据)或在应用程序级别(简单地隐藏用户不需要的消息)将逻辑合并到 UPDATE 和 SELECT 消息应该会看到)。
如果您希望最终升级应用程序以支持 2 人以上的聊天,则您的方法需要有所不同。您需要在用户和消息表之间创建另一个表。您可以将表命名为“MessageStatus”,包括以下字段:
USER_ID
MESSAGE_ID
VISIBLE (bit)
Run Code Online (Sandbox Code Playgroud)
然后该表将通过VISIBLE位字段的值识别哪些用户可以看到哪些消息。
| 归档时间: |
|
| 查看次数: |
2712 次 |
| 最近记录: |