通讯软件数据库解决方案 - MySQL& PHP

时间:2011-09-03 01:22:10

标签: php mysql database-design

我最近建立了一个新闻通讯应用程序。它允许用户订阅一些不同类别的新闻通讯。我在下面设计了一些表格。

  

类别表:id cname description ...

     

订阅者表: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 category”,系统将选择“cakephp category”中的所有订阅者并插入“email”,“subscriber_id” “提交到”newsletter_queue“表,以便系统有足够的能力处理电子邮件发送过程,即使经理暂停发送。

那么,有没有人在通讯核心数据库方面有一些经验?说说它。提前谢谢!

1 个答案:

答案 0 :(得分:0)

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]