2011-09-03 48 views
1

我最近建立了一個通訊應用程序。它允許用戶訂閱一些不同類別的通訊。我設計了一些如下所示的表格。通訊軟件數據庫解決方案 - MySQL&PHP

類別表:ID CNAME描述...

用戶表:ID SNAME CATEGORY_ID ...

通訊表:ID n名稱的內容...

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

你需要另一個'messages'表,你應該很好的處理它。 'newsletter_queue'應該至少有'id | subscriber_id | message_id | added_timestamp | status'。 – Shef

回答

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]