我们正在开发一个 PM 系统,用户可以在其中向其他用户或组发送电子邮件。
我们目前有以下表格:
用户可以是许多组的一部分。用户不必属于任何组。
我遇到的问题是管理收件人和收件箱。组没有收件箱 - 用户有。收件箱存储信息,例如收件人是否已阅读邮件、将其标记为跟进、删除等。
所以我做了两张表:
recipients
recipients_inbox
recipients
只存储线程 id、接收者 id 以及接收者是否是一个组。
recipients_inbox
有此消息发送到的用户 - 无论是作为组的一部分还是单独的。它存储:线程 id、接收者 id、线程上次读取的时间、标记等。
我的问题是:将recipients 和recipients_inbox 表分开是否有意义?我应该将它们组合起来,收件人所在的组离开用户字段,例如 lastRead 并标记为空吗?
谢谢
以下是我认为我会如何处理这个问题:
TABLE message
id number,
message varchar2(8000),
sent_by_user number,
etc...
TABLE inbox
id number,
user_id number,
message_id number,
etc...
Run Code Online (Sandbox Code Playgroud)
然后,当发送到一个组时,我会继续在每个用户的收件箱中添加一个条目,并在消息上有一个指针。这样您就不会复制消息内容,而是通过允许用户对群组消息执行自己的操作而不影响整个群组的群组消息来简化系统。
不确定这是您问题的完整答案,但我会走这条路线,因为这意味着消息管理始终是用户级别的问题;只有在发送操作期间,组才需要输入等式。