一侧删除的聊天模式

Chat schema with one side deletion

我正在努力处理允许从关系数据库 (PostgreSQL) 中对话的一侧删除的聊天模式。

这是我最好的方法:my schema

我找到的所有模式都是关于双方删除的,这不是我需要的。 我希望能够从对话的一侧删除,如果对话重新开始,用户 1 仍然拥有所有消息,而用户 2 只有删除后发送的消息。 所以我的想法是让多对多关系 table(deleted_messages) 将消息与用户相关联,并在用户删除与那些消息的对话时完全填充 table那次谈话。

但是,我不确定这种方法是否是最好的方法,因为我的数据库需要为检索到的每条消息查看消息是否未被删除。随着 deleted_messages table 的增长,这将变得越来越混乱,我担心性能。

我的问题有没有更好的解决办法,或者这个方法好? 感谢您的关注。

正如您提到的“如果对话重新开始,用户 1 仍然拥有所有消息,而用户 2 仅拥有删除后发送的消息”。这会出现 2 种情况:

  1. 如果用户删除了特定的消息,那么您应该使用已有的架构。

  2. 如果用户删除了作为时间点参考的聊天记录,那么您应该创建单独的 table,如下所示。随着数据的增长,为单个用户删除的消息中的每条消息都有一个记录将导致严重的性能问题。 在下面创建 table 并在获取数据时根据时间戳过滤数据。

    创建tabledeleted_chat_history ( 用户 ID 整数, chatRoomId 整数, [时间戳] 时间戳, 外键 (userId) 引用用户, 外键 (chatRoomId) 引用 chat_room )