0

我目前正在为一个网站开发一个 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 列一样。

但是我不确定这是否是一个理想的表结构。在我开始编码之前,我想听听您对改进的想法。

4

1 回答 1

4

将 CSV 值存储在单个字段中总是一个糟糕的设计,只会给您带来极大的痛苦。现在规范化设计,在您将系统推出生产之前:将收件人列表放入子表中,并在子记录上放置一个“已删除”平面,以指示该特定收件人是否删除了邮件:

recipientsTable

messageID    int -> foreign key to messages table
recipientID   int -> foreign key to users table
read     bit - t = read, f = unread
deleted   bit - t = deleted, f = still there.
readON    date - timestamp of when recipient read message

...或类似的东西。

于 2011-11-07T17:00:13.703 回答