database-design - 私信设计

标签 database-design

我正在开发一个新网站,我必须为我们的用户发送私有(private)消息。我已经在其他项目上做过这个,但是那里的设计似乎不正确(例如,我不能让两个以上的人参与一条消息)。
那么什么是“正确”的方法呢?我想为我的用户提供与 Facebook 相同的功能(同样,我已经这样做了,但感觉很脏 :))
因此,系统应支持 2 个或更多用户的对话和类似线程的消息。

我在想,一种解决方案是有两个这样的表:

pm_messages:
编号 | pm_messages_id |user_id |标题 |内容 |约会时间

pm_recipients:
编号 | pm_messages_id |用户 ID |看过|已删除

我会将实际内容存储在“pm_messages”表中,并将收件人(包括原始发件人)存储在“pm_recipients”表中。

这是正确的方向还是我完全不同意?这里困扰我的是,在所有收件人都删除了导致一些尴尬的删除逻辑之前,消息并没有真正被删除。

最佳答案

如果可以有多个收件人,并且他们可以发送回复消息,那么您更多的是处理某种聊天应用程序。您可以将“聊天” session 或对话存储在单独的表格中,其中对话和参与者之间的关系为 1-n,对话和消息之间的关系为 1-n(下表列出)。但最终,这当然取决于你。对于常规消息发送,您使用的消息和收件人之间的 1-n 即可。

table user:
- id (pk)
- name

table conversation (one entry per "chat/messaging" session)
- id (pk)
- started_by_user_id
- started_ts

table conversation_participant (keeps track of all recipients)
- id (pk)
- conversation_id
- user_id (refers to user.id)

table message
- id
- conversation_id (refers to conversation.id)
- sender (refers to user.id)
- msg

关于database-design - 私信设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/564917/

相关文章:

json - 用于存储具有多选字段的动态表单数据的数据库设计

iphone - 在代码或数据库中传播删除?

mysql - 数据库设计 : inventory and sales system?

mysql - 数据库表设计任务

sql - SQL 查询中的双向关系

sql - 如何有效地做数据库as-of查询?

sql - 数据库设计问题。指向不同表的列值

mysql - 多人/单人问答游戏的数据库设计

php - 文档共享系统的数据库设计

mysql - 设计此数据库方案的最佳方法是什么?