Я бы создал ее как одну таблицу с чем-то вроде:
ID
FromID
ToID
Message
Дополнительная таблица, которая связывала бы пользователей с сообщениями, использовалась бы для определения того, кто что прочитал (отправитель автоматически связывается с этим сообщением)., например).
UserID
MessageID
По сути, если пользователь прочитал сообщение, у него будет запись в этой таблице.
Выполнение этого способа дает нам единое представление длявсе пользователи.Чьи-то входящие сообщения - это, в основном, любое сообщение в таблице, в которой они являются получателем, а в отправленном поле - любое сообщение, в котором они являются отправителем.
Мой входной ящик:
SELECT * FROM Messages WHERE FromID = @MyID
Мой исходящий ящик:
SELECT * FROM Messages WHERE ToID = @MyID
Мои непрочитанные сообщения:
SELECT * FROM Messages
WHERE ToID = @MyID
AND ID NOT IN (SELECT MessageID FROM MessagesRead WHERE UserID = @MyID)
Это гораздо проще, имхо, чем пытаться использовать две таблицы, которые в основном делают одно и то же.И вы будете реплицировать From
и To
в обеих таблицах, но в обратном порядке, и у нас будет 2 копии сообщения, которые будут перемещаться, когда нам понадобится только одна.Использование дополнительной таблицы MessagesRead
позволяет отслеживать, кто что прочитал.