Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database design 电子邮件列表数据库设计_Database Design_Relational Database_Database Schema - Fatal编程技术网

Database design 电子邮件列表数据库设计

Database design 电子邮件列表数据库设计,database-design,relational-database,database-schema,Database Design,Relational Database,Database Schema,为电子邮件列表数据库存储已发送电子邮件的有效方法是什么?我搞不清楚 现在,为了简化,我有这样的东西: Lists: ID, Name Subscribers: ID Email Name ListSubscribers: ID SubscriberID ListID Messages: ID Title Content ListID 到目前为止还不错。。。问题在于找出存储已发送和待发送电子邮件以及电子邮件发送状态的有效方法 例如,我可能有数百个列表,每个列表都有成千上万的订户。要了解每封

为电子邮件列表数据库存储已发送电子邮件的有效方法是什么?我搞不清楚

现在,为了简化,我有这样的东西:

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)
有了少量的列表和数十万的订阅者,这可以在几天内激增到数百万条消息

有没有更有效的方法可以做到这一点?

  • 列表(表格): ListID(PK), 列表名

  • 订户(表): SubscriberID(PK), ListID(FK), 名字, 姓, 电子邮件地址

  • 电子邮件(表格): EmailID(主键), ListID(FK), 主题,, 内容,, 发送日期


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

      考虑到您需要管理
      MessageStatus
      的空间,您可以从工作列表的角度操作,而不是从审核日志的角度操作,当然,除非出于某种原因您需要审核日志


      要做到这一点,请使用您定义的
      MessageStatus
      表,但当记录处于“已发送”状态时,请删除它而不是更新它。这样,您的记录数量与尚未发送的电子邮件数量相同。

      这种设计可能存在问题:虽然您知道电子邮件的内容以及发送到哪个列表,但您不一定知道在发送电子邮件的日期谁是该列表的成员。事实上,我最近在我编写和维护的程序中添加了邮件列表功能;我问客户是否希望跟踪电子邮件内容以及发送给谁。她想出了一个简单的答案:给客户发送每封邮件的副本。这样,客户就可以知道每封电子邮件的内容以及发送给谁,而无需将其存储在数据库中。