邮件列表数据库设计

时间:2013-01-09 15:30:21

标签: database-design relational-database database-schema

为电子邮件列表数据库存储已发送电子邮件的有效方法是什么?我在搞清楚方面遇到了一些麻烦。

现在,为了简化我有这样的事情:

Lists:
ID,
Name

Subscribers:
ID
Email
Name

ListSubscribers:
ID
SubscriberID
ListID

Messages:
ID
Title
Content
ListID

到目前为止一直这么好......问题在于找出存储已发送和已发送电子邮件的有效方式以及电子邮件发送状态。

例如,我可能有数百个列表,每个列表都有成千上万的订阅者。要了解每封邮件的状态,我必须存储有关每封邮件的详细信息:

MessageStatus:
ID
MessageID
SubscriberID
Status (processing, sent, soft bounce, hard bounce)

凭借少数几个列表和数十万订阅者,这可以在短短几天内传播到数百万条消息。

有更有效的方法吗?

2 个答案:

答案 0 :(得分:1)

  • 列表(表): ListID(PK), LISTNAME

  • 订户(表): SubscriberID(PK), ListID(FK) 名字, 姓, EmailAddress的

  • 电子邮件(表): EMAILID(PK), ListID(FK) 学科, 内容, SendDate

答案 1 :(得分:1)

既然你在问这个问题,我会假设MessageStatus表占用的空间量对你来说是一个问题。但是,你应该挑战这个假设。

鉴于您需要管理MessageStatus的空间,您可以从 工作清单 的角度进行操作,而不是 审核日志 - 除非您出于某种原因需要拥有审核日志。

要执行此操作,请使用您定义的MessageStatus表,但当记录达到“SENT”状态时,请删除它而不是更新它。这样,您只有与尚未发送的电子邮件一样多的记录。