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

2024-03-12

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

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

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

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

  1. id
  2. to_id
  3. from_id
  4. message
  5. 时间戳
  6. read

我将使用消息查找表来存储谁有权查看该消息

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。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于存储人与人之间聊天消息的数据库设计 的相关文章

随机推荐

  • setInterval 使用 Electron 一小时后停止

    希望有人能在这里指出我正确的方向 我的电子应用程序需要每 10 分钟左右执行一次 API 调用 目前 我在渲染器进程中使用 setInterval 循环来执行此操作 该循环每 10 分钟触发一次 它通常工作得很好 几个小时后似乎就停止了 我
  • Android Studio 在创建新活动时“发生 IDE 错误”

    更新见底部 由于 Android Studio 将自身更新到 v3 0 我无法创建新的 Activity 我收到此错误报告对话框 显示 2 个错误 我尝试了不同的项目 尝试清理项目 重新同步 gradle 重新启动计算机 卸载 重新安装 A
  • strdup():对警告感到困惑(“隐式声明”、“使指针...无需强制转换”、内存泄漏)

    当我编译下面的一小段代码 其中我们定义一个字符串 然后使用 strdup 来制作副本 时 我收到 3 个警告 来自 GCC 的 2 个编译器警告和来自 valgrind 的 1 个运行时警告 错误 我怀疑内存泄漏错误 由 valgrind
  • x86-SSE 中四个压缩单精度浮点到无符号双字的转换

    有没有办法将四个打包单精度浮点值转换为具有 SSE 扩展的 x86 中的四个双字 最接近的指令是CVTPS2PI 但它不能在两个 xmm 寄存器上执行 而是应该给出为CVTPS2PI MM XMM M64 如果我想要类似的东西怎么办
  • R metaMDS 排序距离

    我一直在对不同采样点的丰富物种数据集进行一些排序 我在用metaMDS 素食主义者可以做到这一点 通过此功能 您可以 直接输入群落数据 行中的站点和列中的物种 并指定您希望使用的距离类型 即 jaccard brays curtis euc
  • Linux 上的 OpenCL,集成英特尔图形芯片

    我想用OpenCL在 Debian 8 上 我读到在本页 http streamcomputing eu blog 2011 12 29 opencl hardware support Linux 上不支持 Intel 的 GPU 这篇文章
  • XCode 4.5 警告父/子类的类别之间的方法名称冲突

    我正在开发一个最初使用 XCode 4 0 构建的项目 然后迁移到使用 XCode 4 2 现在我已经测试了迁移到 XCode 4 5 并且收到了大量如下警告 instance method values in category from
  • 如何将模型数据对象数组转换为dataProvider

    假设我有模型User与其自身有多对多的关系 命名为friends so user gt friends or model gt friends在视图中 给了我一个数组User对象 我想将朋友显示为网格视图 但CGridView数据为data
  • 在二维动画上绘制可变大小和位置的圆圈

    我正在 Python 3 3 中使用 matplotlib 我有一个动画 2d 和 3d 窗口 我在上面画点 这些点代表物体 但不确定它们是否真的存在 所以我想围绕这些点画一个圆圈来显示不确定性 这种不确定性是变化的 所以底线是 我想在 2
  • JavaScript 中可以编写连续的嵌套函数吗?

    我知道这就是封闭的领域 但是可以连续调用嵌套的匿名函数吗 假设我有这个 function testing input var testing 0 function testing testing 1 return testing 我们可以有
  • 多列的加权平均值,按组(在 data.table 中)

    这个问题紧接着另一个问题组加权平均值 https stackoverflow com questions 14145859 weighted means by group and column 我想使用创建加权组内平均值data table
  • 自动更新AngularJS中的范围变量

    我目前正在使用 AngularJS 我想从服务返回一个变量 让作用域知道它何时发生变化 为了说明这一点 请查看 www angularjs org 中的示例 连接后端 粗略地 我们可以看到以下内容 var projects firebase
  • 如何使用 ITfoxtec 创建 IdP

    我有兴趣使用 SAML 创建 IdP 身份提供商 是否可以使用 ITfoxtec Nuget 创建完整的 IdP 功能 有 ASP Net C 的示例吗 是的 可以使用 ITfoxtec Identity Saml 2 0 库实施 IdP
  • 使用 WCF 将 Linq-to-Sql 对象发送到服务器时出错

    我正在尝试开发一个具有 2 层的系统 移动客户端和使用 LINQ to SQL 在数据库中存储信息的服务器 我想创建一个在服务器中存储任务的 WCF 服务器 因此它将从客户端接收任务并使用 LINQ to SQL 来存储它 为了执行此服务
  • 从键值对动态填充列

    我正在使用 xslt 文件进行样式设置 我以表格格式显示一些内容 我需要从预定义的键值对动态填充一列 请看下面的例子
  • 动态增加android中的相对布局大小

    我有一个相对布局 在其中显示页面和一些内容 当我缩放页面时 布局尺寸没有增加 我希望我的布局能够动态增加其大小 我该如何设置 我尝试用java代码来做 contentLayout getLayoutParams height x some
  • PySpark:如何分组、重新采样和前向填充空值?

    考虑以下数据集in Spark 我想以特定频率 例如 5 分钟 对日期重新采样 START DATE dt datetime 2019 8 15 20 33 0 test df pd DataFrame school id remote r
  • 使用 OrdinalEncoder 转换分类值

    我有一个数据集 其中包含以下列 No Name Sex Blood Grade Height Study 1 Tom M O 56 160 Math 2 Harry M A 76 192 Math 3 John M A 45 178 Eng
  • pip 无法从requirements.txt 安装包

    我正在尝试使用需求文件安装 python 软件 gt gt cat requirements txt Cython 0 15 1 numpy 1 6 1 distribute 0 6 24 logilab astng 0 23 1logil
  • 用于存储人与人之间聊天消息的数据库设计

    我正在尝试构建一个消息 聊天系统 它可以按时间顺序存储两个人之间的对话 此外 如果用户 A 删除对话 用户 B 仍应有权访问该对话 直到他希望删除它们为止 收件箱 用户从各个用户收到的所有消息将与来自该特定线程的最新消息一起显示 对话屏幕