我認爲你需要的是一個複合密鑰表連接多個用戶與消息。我也認爲你錯過了CONVERSATION表,它會將多條消息加入到特定的對話中。
所提出的方案:
USERS USER_THREADS THREADS MESSAGES
User_ID -> User_ID
Thread_ID -> Thread_ID
Message_ID -> Message_ID
我們清除您需要從USER_THREADS表中刪除記錄爲USER_ID和THREAD_ID個人用戶進行對話。
上述方案還允許攜帶兩個以上的人之間的對話作爲線程可以通過下面的SELECT語句有許多用戶:
迴應您的評論:
修改的MESSAGE表:
您不需要MESSAGE_SENDER_ID
和MESSAGE_RECIEVER_ID
,因爲這些信息將通過USER_THREADS
表進行標識。 編輯: 您應該保留在MESSAGE
表MESSAGE_SENDER_ID
爲了識別發送消息的用戶。
假設用戶登錄到您的應用程序將獲得USER_THREADS表中的所有對話。
select *
from USER_THREADS as ut
inner join THREADS as t on ut.Thread_ID = t.Thread_ID
inner join MESSAGES m on m.Message_ID = t.Message_ID
where USER_THREADS.User_ID = 001
SQL INSERT語句:
當用戶寫郵件的應用程序應該插入郵件正文爲消息表有自動ID,這與Message_ID將隨後被下一個插入語句來創建THREADS表中的新記錄。你沒有提到你的DBMS,但在MSSQL的SQL語句看起來是這樣的:
DECLARE @message_id int
insert into MESSAGES values (‘message body’)
set @message_id = SCOPE_IDENTITY() -–an id of the newly inserted message
insert into THREADS values (@message_id, @thread_id)
清除歷史爲單個用戶的SQL語法:
delete from USER_THREADS where User_ID = 0000 AND Thread_ID = 0000
這將刪除整個該用戶的線程
'users.user_id'是否映射到'messages.message_sender_id'和'message_receiver_id'? – 2014-08-28 09:03:03
是@KevinHogg他們做的:) – Sora 2014-08-28 09:11:58