2011-05-17 73 views
2

我想在PHP和MySQL中實現一個消息傳遞系統,但是我在決定如何執行表和查詢時遇到了一些麻煩。消息傳遞系統數據庫模式

允許多個參與者的系統的最佳方法是什麼?我想我可能需要3個表(除了用戶表)。

喜歡的東西

Conversation 
------------ 
id 

Messages 
-------- 
id 
conversation_id 
from_id 
subject 
message 
from_timestamp 

Participants 
------------ 
conversation_id 
user_id 
last_read_timestamp 

事情是這樣的設置我不得不通過時間戳,而不是蜻蜓點水每個消息以檢測讀短信。我也可以隨時添加參與者。

你們認爲什麼?

在此先感謝。

+0

@ChrisWalton - 'from_id'將是消息發件人的user_id。許多參與者可能屬於對話,但消息可能只屬於一個參與者(或前參與者 - 仍在考慮如何做到這一點)。對話的所有參與者都可能看到與其相關的消息。歡呼 – RS7 2011-05-17 15:39:05

+1

我認爲from_id是作者的user_id。如果我理解正確,「參與者」表將會話鏈接到用戶表(這裏未顯示)並存儲上次用戶閱讀此對話的時間。 – Jad 2011-05-17 15:41:48

+0

很想看看你如何處理一個參與者的問題!這是我見過的更好的表格模式之一。 – 2013-11-07 04:58:56

回答

3

我沒有看到太多抱怨:)我可能會緩存會話表上的最後修改日期,以便可以快速顯示「未讀」對話列表。每次在對話中發佈消息時,都會更新此日期。

1

我會把主題字段放在會話表上。把它放在每一條消息看起來都是多餘的。 另外,我會在表格中保存會話的創建時間和作者用戶標識。