首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否计划交付Database structure question...Emails?

是否计划交付Database structure question...Emails?
EN

Stack Overflow用户
提问于 2009-12-20 20:55:22
回答 2查看 371关注 0票数 0

我正在尝试实现一个系统,在这个系统中,发送给大量(或少量)人员的电子邮件计划由cron作业发送(而不是在循环中,当用户等待他们完成发送时)。

用户可以发送两种类型的电子邮件:向订阅者表中的每个人发送电子邮件,或仅向组中的成员发送电子邮件。我想我真的不需要包括发送给组成员的电子邮件,因为它们将是发送给小组的电子邮件,而不是大型(所有订阅者)组的电子邮件。

我正在试图弄清楚如何构建我的数据库,以便它有意义,但我甚至很难解释它应该如何工作。

你有没有这方面的经验可以分享?我应该如何组织我的数据库,以跟踪正在等待传递的电子邮件?

EN

回答 2

Stack Overflow用户

发布于 2009-12-20 21:50:59

您希望实现的是一个利用存储层的基本队列。

代码语言:javascript
复制
User (
    id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(125) NOT NULL
);

User_Group (
    id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    user_id INTEGER UNSIGNED NOT NULL,
    group_id INTEGER UNSIGNED NOT NULL
);

Group (
    id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(75) NOT NULL,
    description VARCHAR(255)
)

MailingList (
    id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    user_id INTEGER UNSIGNED NOT NULL,

);

# mails to be sent out to groups / all 
MailQueue (
    id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    group_id INTEGER UNSIGNED,
    time_to_send DATETIME DEFAULT CURRENT_TIMESTAMP
);

您需要在MailQueue中输入具有有效unix时间戳的条目,才能将组电子邮件排入队列。您应该创建一个“All”组,您将把每个用户都分配到这个组中,这样您仍然可以正确地使用这些表。您可以像这样运行cron查询:

代码语言:javascript
复制
SELECT User.email
FROM MailQueue
INNER JOIN User_Group ON (MailQueue.group_id = User_Group.id)
INNER JOIN User ON (User_Group.user_id = User.id)
WHERE MailQueue.time_to_send < NOW();

您需要确保在使用结果集之后将其删除,因为您没有这样做,这将导致发送重复的电子邮件条目。如果您希望保留已发送电子邮件的日志,只需添加另一个指示sent_email = 1TINYINT(1) UNSIGNED字段,并修复您的SELECT查询,以便仅在值为0时获取结果。

票数 3
EN

Stack Overflow用户

发布于 2009-12-20 21:13:45

使用连接表将挂起的电子邮件链接到用户。使用另一个联接表来管理组。当电子邮件发往某个组时,可以使用存储过程用该组中所有成员的in填充EmailRecipients表。

表:

代码语言:javascript
复制
PendingEmails
  ID
  Subject
  Body

EmailRecipients (join table)
  EmailID
  UserID

Users
  ID

Groups  (join table)
  GroupID
  UserID
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1935761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档