mysql - 扩展数据库以进行群组/协作消息传递

标签 mysql database database-design chat messaging

我正在创建的消息应用程序有以下数据库架构:-

表名称:- conversation_threads

+-----------------+-------+---------+
| conversation_id | label | members |
+-----------------+-------+---------+
| 1               | TEST  | 1,2     |
+-----------------+-------+---------+
| 2               | XYZ   | 4,1     |
+-----------------+-------+---------+

表名称:- 消息

+------------+----------------+-----------+-----------------+---------------------+
| message_id | message        | sender_id | conversation_id | created_at          |
+------------+----------------+-----------+-----------------+---------------------+
| 1          | Hello          | 1         | 1               | 2017-09-12 09:00:00 |
+------------+----------------+-----------+-----------------+---------------------+
| 2          | Hi             | 2         | 1               | 2017-09-12 09:02:00 |
+------------+----------------+-----------+-----------------+---------------------+
| 3          | Hey!           | 4         | 2               | 2017-09-12 08:16:00 |
+------------+----------------+-----------+-----------------+---------------------+

表名称:- message_users

+----------+-------------+---------+--------+
| mu_id    | message_id  | user_id | status |
+----------+-------------+---------+--------+
| 1        | 1           | 1       | READ   |
+----------+-------------+---------+--------+
| 2        | 1           | 2       | UNREAD |
+----------+-------------+---------+--------+
| 3        | 2           | 2       | READ   |
+----------+-------------+---------+--------+
| 4        | 2           | 1       | UNREAD |
+----------+-------------+---------+--------+
| 5        | 3           | 4       | READ   |
+----------+-------------+---------+--------+
| 6        | 3           | 1       | UNREAD |
+----------+-------------+---------+--------+

此架构非常适合一对一消息传递。

但现在我想在一次对话中介绍 2 个以上的用户,以便所有 3、4 个或更多的人可以协作和讨论事物。

我面临的问题是,如果我在对话线程的成员字段中添加另一个用户 - 他可以从一开始就读取该特定对话线程中存在的所有消息 - 尽管他被添加到谈话的后期。

请为我提供解决此特定问题的解决方案。

希望我的问题不是太宽泛。

最佳答案

如果我理解你的架构关系,你只需像你一样放置成员

+-----------------+-------+---------+
| conversation_id | label | members |
+-----------------+-------+---------+
| 1               | TEST  | 1,2,3,4 |
+-----------------+-------+---------+

关于mysql - 扩展数据库以进行群组/协作消息传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46171591/

相关文章:

database - 适用于所有开发人员的 WordPress 多站点和单一数据库

mysql - 创建此数据库的 E-R 图

php - 将数据提取到表中并更新 - 编辑时不仅单击一个值选择

sql - 找到表有二进制数据

c# - NHibernate保存非持久实体,同时维护现有ID

MySQL网络客户事件分析问题

php - 即使用户没有在注册表单上注册,我的 PID 也会自动递增

database - crm 2011 更改 30K 记录的所有者

c# - EF code first many to many with payload, compound key or surrogate key

database-design - 在 cassandra 中更改或创建新表以添加新列