Database design 创建简单的电子邮件/消息数据库模式
我正在创建一个小型邮件/消息发送数据库模式。它不是一个真正的邮件系统,而是一个组织的消息传递门户,具有以下用例:Database design 创建简单的电子邮件/消息数据库模式,database-design,database-schema,Database Design,Database Schema,我正在创建一个小型邮件/消息发送数据库模式。它不是一个真正的邮件系统,而是一个组织的消息传递门户,具有以下用例: 员工可以向所有员工广播消息 员工可以互相发送消息 员工可以回复收到的邮件 员工可以通过查看收件箱中的“时间戳”栏查看他/她已回复的邮件(即,收件箱中必须有一个“repliedat”栏,该栏应显示回复此邮件时的时间戳,如果没有,则应为空) 当他打开一条特定的消息时,他会看到一个消息的线程视图,最新消息在顶部 我的问题 我如何跟踪某条消息是否是对任何消息的回复,在电子邮件中,我相信它嵌入
如何创建线程或链 在数据库表中保留一个指向原始电子邮件的字段。每封电子邮件只能有一个前任(或“父亲”),而任何电子邮件都不能有一个或多个继任者(或“儿子”)。因此,最好保持对前任的记录 这也是创建线程或链的方式:线程中的第一条消息的“父”字段将等于0,但稍后的消息将在此字段中包含其他值。如果您维护一个名为“thread”或“conversation”的字段,这也会有所帮助,这样就可以很容易地知道哪些消息连接到了哪些线程 有趣的部分不一定是如何在链中存储链接,而是如何遍历链 下面是一个简单的数据模式
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
由于一封邮件可以发送给许多人,因此邮件与收件人之间存在一对多关系。每个收件人将在不同的时间阅读邮件,并具有不同的状态(未读、已读、已删除、已删除、未读等) 你自己已经走了多远?我在如何向每封邮件/消息添加收件人方面遇到了问题,然后我发现收件人不是每封邮件的收件人,而是与线程关联的,谢谢你的帮助help@No“阿姆纽曼:如果信息来自两种类型的人,员工和客户会怎样?”@史密斯:消息来源应该不会太重要。请注意,我的模式有一个字段“from_id”,它是“users”表的外键。通过此字段,可以访问用户的属性。是的,但这是用户表的FK,而不是另一个表我致力于回答[1]问题,这是最好的[1]: