我最近建立了一个新闻通讯应用程序。它允许用户订阅一些不同类别的新闻通讯。我在下面设计了一些表格。
类别表: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“表,以便系统有足够的能力处理电子邮件发送过程,即使经理暂停发送。
那么,有没有人在通讯核心数据库方面有一些经验?说说它。提前谢谢!
答案 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]