mysql - 用于存储人与人之间聊天消息的数据库设计

标签 mysql database database-design database-schema

我正在尝试构建消息/聊天系统。它可以按时间顺序存储两个人之间的对话。此外,如果用户 A 删除了对话,用户 B 仍然应该可以访问该对话,直到他希望删除它们为止。

  1. 收件箱 - 用户从不同用户收到的所有消息将与来自该特定线程的最新消息一起显示。

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

这是我想出的数据库的基本结构。我应该将消息存储在数据库中两次吗?

  1. 编号
  2. to_id
  3. 来自_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。

关于mysql - 用于存储人与人之间聊天消息的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8105927/

相关文章:

mysql - 我们是否使用非 TEXT 列使数据库表变得复杂?

php - 为什么我不能使用 php 插入 mysql 数据库?

sql-server - 如何合并具有自动编号主键的表?

mysql - 一列 SQL 表,该列是一个 ID - 这很疯狂吗?

amazon-web-services - UUID 作为 DynamoDB 中的主键——好还是坏主意?

mysql - 我可以在 GROUP BY 之前执行 COUNT()

mysql - csv更新数据库表

MySql select 语句获取每个 client_id 的最新行

php - 无法在 Laravel 5.1 中保存选择框选项

php - 来自数据库查询的数组内数组