2011-10-13 109 views
0

我有一個包含聯繫人的表格和另一個包含消息的表格。在消息表中,我有一個單元格,其中保存了消息發送到的那些成員的序列化ID字符串。結構化mySQL

現在,我將追加一個唯一的標識符令牌,當成員響應時,我將能夠跟蹤它是哪個成員。我應該將此信息存儲在單獨的表中,還是將另一個單元格添加到消息表中,這些單元格還可以容納一串響應的成員?

邏輯告訴我,一個單獨的表會更容易些,但在同一時間,它可以非常快增長,因爲有可能是郵件的收件人的多個組,每個人都可以擁有多條消息,這將轉化爲多行,而不是帶有序列化字符串的單個單元格。

+1

我發佈的一些問題仍然沒有答案。如果我接受一個沒有回答問題的人,它會貶低SO模型。 – santa

+0

夠公平的。你是其中只有70%的問題回答的少數人之一。 :) – GolezTrol

回答

1

我認爲傳統的方法是有連接表。因此,如果您有一個Contacts表和Messages表,您可以創建一個ContactMessagesSent表,其中主鍵爲ContactsMessages作爲列,以跟蹤哪些郵件發送到哪些聯繫人。您可以創建另一個連接表ContactMessagesReceived來跟蹤回覆。

所以

ContactMessagesSent 
-------- 
contact_id ; // primary key of Contacts 
message_id ; // primary key of Messages 
... 

如果你使用正確的索引,它會表現良好,即使有大量的表中的行的。

+0

什麼是正確的索引? – santa

+0

取決於你如何去查詢表。您可能想要通過contact_id,message_id和兩者(contact_id,message_id) – hvgotcodes

2

使用單獨的表格很可能會更容易,更快速。

例如,如果要查找發送給特定用戶的所有消息,它將是一個簡單的查詢:WHERE recipient = id。這個查詢會執行得很好,因爲它可以使用索引。

如果將它作爲逗號分隔的ID列表存儲在文本字段中,則必須使用例如FIND_IN_SET編寫查詢。此查詢將無法使用索引。

+0

我不認爲我需要一個功能來查找發送給每個收件人的郵件。但我很可能需要顯示發送給誰以及是否有響應。我開始傾向於一張單獨的桌子。在mySQL中被認爲是一個相當大的表。假設只有4列使用簡單的數字ID,我可以有多少行? – santa

1

創建一個單獨的表。首先存儲一連串的成員是一個錯誤的決定。在這樣的領域進行查詢是非常麻煩和緩慢的。

製作一個單獨的交叉鏈接表,它將成員綁定到消息,因此您可以通過它進行實際查詢。然後,您可以向該表格添加一個字段'已回覆',以標記成員是否迴應。