2012-07-01 35 views
4

表結構,我希望建立一個多處理交談,如Facebook是怎麼做的郵件系統。我想知道做什麼的最好方法是關於表結構。我將有一個表,如:人談話的郵件系統

 
id 
reply_id - the id of the original message that started the conversation 
to_id 
from_id 
subject 
content 
date_sent 
read_status 

兩個表:

 
table 1 - for the start of new messages 

id 
to_id 
from_id 
subject 
content 
date_sent 
read_status 

table 2 - when someone replies to a message 

id 
message_id 
to_id 
from_id 
subject 
content 
date_sent 
read_status 

回答

1

我想說一個表。爲何複製相同的數據?此外,當你的信息數據結構由不必關心其他表是等同於第一改變,你會刪除錯誤的來源。

2

這取決於很多事情,但第一個猜測的企圖可能是「消息」的自我指涉表。例如:

message: 
    sender_id: User 
    recipient_id: User 
    in_reply_to_id: Message 
    subject, content, etc 

消息看起來像:

belongs_to :sender, :class => 'User' 
    belongs_to :recipient, :class => 'User' 
    has_many :replies, :dependent => :destroy 
    belongs_to :in_reply_to, :class => 'Message' 

這將允許你建立答覆的樹(因爲消息可以in_reply_to的消息,這可能又是in_reply_to又一信息)。您可能還想考慮使用諸如acts_as_ordered_tree之類的東西來獲得更大的靈活性和控制力。

+0

我認爲這將是沿着評論表結構的線以上,但消息依然很大以及在某些情況下。 +1 –

-5

真正的最好的答案是:MySQL是建立電子郵件和聊天類型系統一個非常糟糕的工具。

消息系統已經存在。聊天系統已經存在。你爲什麼試圖重新發明輪子?