2010-01-21 48 views
1

對不起一個消息「系統」,我有一個擔憂:創建的DB(最特別的MySQL)

我有一個表successully在MySQL創建:

CREATE TABLE IF NOT EXISTS MESSAGE 
(
    MESSAGE_ID   BIGINT NOT NULL AUTO_INCREMENT  
    ,AUTHOR_ID   VARCHAR(30) NOT NULL 
    ,TITLE    VARCHAR(100) NOT NULL 
    ,MESSAGE   VARCHAR(4095) NOT NULL 
    ,UNREAD_FLAG   BOOLEAN NOT NULL DEFAULT TRUE     
    ,CREATION_DATE   TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
    ,DATE_LAST_MODIFIED  TIMESTAMP NULL 

    ,PRIMARY KEY (MESSAGE_ID) 
    ,FOREIGN KEY (AUTHOR_ID) REFERENCES USER (USR_ID) 
); 

正如你所看到的,有由於1個或多個收件人可以收到相同郵件的原因,沒有提及誰收到郵件。

1)如何實現消息線程「模型」,以便如果有消息發送給多個用戶,則收件人可以回覆消息並跟蹤收件人回覆的消息?例如。我向5位朋友發送了關於派對的消息,他們都回復了,我將如何保留對原始消息的回覆消息鏈接的記錄?此外,收件人還可以響應已回覆的消息,創建對已回覆消息的響應,因此最終它將是一個類似響應消息結構的樹。

2)如何創建一個表讓一個以上的收件人收到相同的信息?我有一個想法,創建一個與recipient_id(引用用戶表)和message_id(消息ID)對的表。這是否有效?我問的原因是,如果200人收到相同的消息,那麼將有200個user_id表,message_id對錶...

再次感謝和平!

P.S.我已經實現了2號),所以我想這不會是一個問題。

回答

0
  1. 我不明白你的問題在這裏。

  2. 你的想法是這樣做的正常方法。你需要設置一個包含recipient_id和message_id的表,並根據它運行查詢以確定(例如)特定用戶具有哪些消息。您可能還需要在此表中存儲其他數據,例如用戶是否已閱讀郵件等,具體取決於您的應用程序的需求。

+0

對於2號,我確實已經......謝謝..我更擔心的是問題1.請注意,我已經重新更新了這個問題。 – 2010-01-21 19:29:28

+0

我只需在消息表中添加另一列來跟蹤response_to_id,這將是一個返回給message_id的外鍵,但可以爲null。如果有人對消息#123作出響應,則他們的新消息將其response_to_id設置爲123.您可以以這種方式跟蹤鏈接,以響應響應等等。 – eliah 2010-01-21 19:35:52

+0

好的,會不會允許空外鍵?這是否使我的表正常化? – 2010-01-21 19:46:10