我正在try 建立一个消息传递/聊天系统.它可以按时间顺序存储两个人之间的对话.此外,如果用户A删除了该对话,则用户B在希望删除它们之前仍然应该有权访问该对话.

  1. 收件箱-用户从不同用户收到的所有邮件都将与来自该特定主题的最新邮件一起显示.

  2. 对话屏幕-用户A和用户B之间对话的时间顺序

这是我想出的数据库的基本 struct .我应该在数据库中存储两次消息吗?

  1. ID号
  2. to_ID号
  3. from_ID号
  4. 消息
  5. 时间戳
  6. 阅读

推荐答案

我会使用一个查询表来存储有权查看该邮件的用户的邮件

table->message                   |    table->messageUsers
id->0, message->'hi', user_id->1      user_id->1, message_id->0
                                      user_id->2, message_id->0

这样,如果用户删除了他们的消息,他们实际上只是删除了他们与消息的关系,而不是消息本身.您只需将它们从messageUsers表中删除即可.或将活动字段设置为1或0.

Database相关问答推荐

如何替换对象数组内的数组元素

用于在 Excel 中的两个列表之间进行筛选的辅助列

查询最后一天、上周、上个月SQLite

为什么null不等于null false

PostgreSQL 是否对只读事务进行了一些性能优化

如果我 for each 用户随机设置 SALT,我如何对他们进行身份验证?

操作错误:FATAL: database "django" does not exist

Uniqueidentifier vs. IDENTITY vs. Material Code - 主键的最佳 Select 是哪个?

文件访问速度与数据库访问速度

nvarchar (50) 与 nvarchar (max) 的含义

更改列名 Rails

将少量信息保存为 android 中的设置

执行语句还是运行脚本?

使用十进制数据类型(MySQL / Postgres)是否会影响性能

显示包含特定表的所有数据库名称

CouchDB、MongoDB 和 Redis 中的哪个数据库适合从 Node.js 开始?

ORM 还是Vietnam of Computer Science吗?

用 SQL 进行条件插入?

在连接表中,Rails 缺少组合键的最佳解决方法是什么?

Rails 控制台 - 查找在某天创建的位置