【问题标题】:Newsletter Software Database Solutions - MySQL & PHP时事通讯软件数据库解决方案 - MySQL 和 PHP
【发布时间】:2011-09-03 01:22:09
【问题描述】:

我最近构建了一个时事通讯应用程序。它允许用户订阅一些不同类别的时事通讯。我已经设计了一些像下面这样的表格。

类别表:id cname 描述...

订阅者表:id sname category_id...

通讯表:id nname 内容...

category_newsletter 表:id newsletter_id category_id

当经理创建时事通讯时,会选择一些类别。这是由 category_newsletter 表完成的,类似于,

category_newsletter 表:id newsletter_id category_id

到目前为止,一切都很顺利。但问题是,如何将时事通讯发送给选定类别的订阅者?我有一个解决方案,但我不知道这是否可以。

我设计了另一个表名为“newsletter_queue”,当经理创建一个时事通讯并选择一些类别,例如“cakephp类别”,然后系统将选择“cakephp类别”中的所有订阅者并插入“电子邮件”字段,“subscriber_id " 归档到 "newsletter_queue" 表中,以便系统有足够的权力来处理电子邮件发送过程,即使管理员暂停发送。

那么,有人对时事通讯核心数据库有一些经验吗?说说它。提前致谢!

【问题讨论】:

  • 您需要为messages 使用另一个表,并且您处理它的方式应该没问题。 newsletter_queue 至少应有 id | subscriber_id | message_id | added_timestamp | status

标签: php mysql database-design


【解决方案1】:
Category Table: 
  CategoryId
  Name
  Description...

Subscriber Table:
  SubscriberId
  Name

Subscription Table:
  SubscriberId
  CategoryId

Newsletter Table:
 NewsletterId
 Name
 Content...

CategoryNewsletter Table:
  NewsletterId
  CategoryId

NewsletterQueue Table:
  SubscriberId
  NewsletterId
  Sent...

您不需要 category_newsletter 中的额外 id 列。您可以创建一个结合了 NewsletterId 和 CategoryId 的主键,应该足够了。

订阅者表也应该分成两个表。您应该有一个订阅者表,其中包含订阅者的 ID 和名称。第二个订阅表是订阅者的 id 和类别的 id,这样一个用户可以订阅多个类别,如您所说。

在选择将简报发送给谁时,您还需要确保获得不同的电子邮件地址,因为用户似乎可以注册多个类别并将简报分配给多个类别。

如果用户关注类别 A 和 B,并且经理为类别 A 和 B 创建简报,如果您只选择订阅所选类别的所有用户,它将返回用户两次,他们关注的每个类别一次。

Insert into NewsletterQueue (SubscriberId, NewsletterId)
Select Distinct s.SubscriberId, cn.NewsletterId
From SubscriptionTable s
INNER JOIN CategoryNewsletter cn ON s.CategoryId = cn.CategoryId
WHERE cn.NewsletterId = [x]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-28
    • 2014-11-01
    • 2014-01-23
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多