【发布时间】:2009-09-09 17:22:34
【问题描述】:
我想为可能属于个人用户或用户组的邮件设计一个邮件收件箱表架构。
假设我们已经有了这些表:
- 带有 uid (PK) 的用户表
- 使用 gid (PK) 对表进行分组
- groups_association 表与 gid (FK) 和 uid (FK)
那么,满足这些要求的消息和消息发布表的最佳设计是什么:
- 任何个人用户都可以向其他用户发送消息
- 任何个人用户都可以向多个用户发送消息
- 任何个人用户都可以向单个组中的所有用户发送消息(特定组中的用户数量可能随时间变化)
- 您应该能够查询属于特定用户的所有消息
我现在的想法是这样的:
- 设置三个表:
- 消息中间(PK),让我们说主题
- message_participants 带有 mpmid (FK)、mptype ENUM('user', 'group') 和 mpid (FK of the 类型)
- message_posts 带有 msgmid (FK) 引用消息表 PK
- 获取所有消息
- 获取特定用户的所有组
- 查询 message_participants WHERE (mptype = 'user' AND mpid = uid) OR (mptype = 'group' AND mpid IN (所有用户组))
这样您甚至可以同时向单个用户和组发送消息。
这是您通常处理此类问题的方式吗?
【问题讨论】:
-
为什么邮件属于用户组?为什么不直接复制消息并将其发送给组中的每个成员?您的请求是否声明消息必须属于一个组?只是好奇。
-
好吧,如果我要向每个组成员发送一条单独的消息,那么如果该用户回复该消息,您将不得不将其发送给该组的所有成员,依此类推.因此,我在想必须有一种更好的方法可以只存储一个消息副本。我认为您可以有另一个表格将各个帖子与用户链接起来,该表格可以包含另一列关于该消息是否已被特定用户阅读或删除...