我目前正在为一个网站开发一个 PM 系统,其中用户必须能够将 PM 发送给多个收件人。当然,这意味着如果一条消息已发送给用户 A、B 和 C,则用户 C 可以删除该消息,而用户 A 和 B 则不会。问题是这样一个系统的最佳数据库表结构是什么,当然要避免一条消息的多个副本。目前我已经想到了这个表结构:
msgid (int),
parentid (int),
timestamp (timestamp),
senderid (int),
recipients (varchar),
subject (varchar)
text (text),
deletedby (varchar),
readby (varchar)
这将是唯一的桌子。线程是根据 parentid 创建的(如果没有 parentid,则消息是线程中的第一个),并按时间戳排序。收件人以逗号分隔存储在一列中,并使用 WHERE userid IN (msg.recipients) 检查。deletedby 列包含已删除消息的所有用户的 id(逗号分隔),就像 readby 列一样。
但是我不确定这是否是一个理想的表结构。在我开始编码之前,我想听听您对改进的想法。