我正在尝试实现一个数据库设计系统,该系统将向一个人(因此是一对一)或许多人(一对多)发送消息。
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 |
根据我上面的模式,用户可以向一个人发送消息,也可以向许多人发送消息。一旦用户向一个人发送消息,我们将拥有所有收件人 userid
在recipient
表以及 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/