我正在创建一个小的邮件/消息发送数据库架构。它不是实际的邮件系统,而是带有组织的消息传递门户,具有以下用例:
我的问题
我如何跟踪特定邮件是否是对任何邮件的回复,在电子邮件中,我相信它已嵌入标题中。我是否保留一个“repliedto” id字段,该字段指向另一条消息,即答复?
如何创建线程或链条?
最佳答案
在数据库表中保留一个指向原始电子邮件的字段。每封电子邮件只能有一个前任(或“父亲”),而任何电子邮件都不能有一个或多个后继(或“儿子”)。因此,最好保留前身是什么的记录。
这也是创建线程或链的方式:线程中的第一条消息的“父亲”字段将等于0,但随后的消息将在此字段中包含其他值。如果您维护一个称为“线程”或“对话”的字段,这也将有所帮助,从而使您轻松知道哪些消息连接到哪些线程。
有趣的部分不一定是如何在链中存储链接,而是如何遍历链。
以下是一个简单的数据模式
USERS
id - autoinc
name - varchar
THREADS
id - autoinc
name - varchar
STATUSES
id - autoinc
name - varchar
MESSAGES
msg_id - autoinc
from_id (fk to users table) - int
datesent - date
thread (fk to threads table) - int
father (pointer to previous message in this thread) - int
text - varchar
RECIPIENTS
id - autoinc
msg_id (fk to messages table) - int
to_id (fk to users table) - int
status (fk to statuses table) - int
dateread - date
由于一条消息可以发送给许多人,因此消息和收件人之间存在一对多的关系。每个收件人将在不同的时间阅读邮件,并具有不同的状态(未读,已读,已删除,已删除未读等)。
关于database-design - 制作简单的电子邮件/消息数据库架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13157049/