mysql - 个人和全局消息数据库设计

标签 mysql database

我正在尝试实现一个数据库设计系统,该系统将向一个人(因此是一对一)或许多人(一对多)发送消息。

table --users
          |u_id | Name |
          | 01  | Aku  |
          | 02  | Sika |
          | 03  | Admin|

table --messages 
          |m_id | sender_id | Body   | Time |
          | 100 |  01       | hello  | 16:04|
          | 200 |  02       | Hi     | 16:08|
          | 300 |  03       | hi Guys| 19:12|

table --recipient
          |r_id| m_id | recipient_id| 
          | 50 | 100  |  02         |
          | 51 | 200  |  01         |
          | 52 | 300  |  01         |
          | 53 | 300  |  02         |

table --message_status
          |m_id | recipient_id | status | deleted |
          |100  |   02         | read   |  no     |
          |200  |   01         | unread |  no     |
          |300  |   01         | read   |  yes    |
          |300  |   02         | unread |  no     | 

根据我上面的模式,用户可以向一个人发送消息,也可以向许多人发送消息。一旦用户向一个人发送消息,我们将拥有所有收件人 useridrecipient表以及 message_status table 。因此,假设用户一次向 100 万用户发送一条消息,这意味着 recipient 中将有 100 万行。和 message_status表。

当一个用户向许多用户发送消息时,请问是否有一种方法可以通过减少行的插入次数来解决这个问题,或者这是正确的做法。

注意

请系统允许每个收件人删除收到的消息(如果他/她愿意),但是他们的删除不应影响其他收件人。因此,如果用户使用 u_id = 02删除她收到的消息,用户 u_id=01仍应查看他的消息。

感谢您的帮助。

最佳答案

为什么不将message_status 表和recipient 表 结合起来呢?然后你只更新/插入一个表而不是两个。

收件人:

      |r_id| m_id | recipient_id|  status | deleted |
      | 50 | 100  |  02         |  read   |  no     |
      | 51 | 200  |  01         |  unread |  no     |
      | 52 | 300  |  01         |  read   |  yes    |
      | 53 | 300  |  02         |  unread |  no     | 

关于mysql - 个人和全局消息数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24576764/

相关文章:

database - 如何使用自己的sqlite数据库?

php - 从左连接中删除空值 MYSQL 和 PHP

mysql - 找不到模块 : Can't resolve 'fs' in '.../node_modules/destroy' using Next. js mysql Express React

python - 将列默认值设置为 NULL

mysql - 更改 Bonita 6.5 的默认数据库

mysql - 如何引用mysql中同一行的值?

mysql - #1062 - key 1 的重复条目 '1' - 未找到重复条目

mysql - 如何让 MySQL 匹配 `%D%` => `Đ`

Mysql查询优化

mysql - 用于数据库查询结果的数据可视化工具