Рекомендации по схеме базы данных для функции обмена сообщениями между пользователями на веб-сайте, управляемом PHP

У меня есть сайт, управляемый пользователями. Я хочу добавить функцию обмена сообщениями. Меня беспокоит управляемость и производительность моей базы данных.

Я думаю об организации этого следующим образом: у меня есть таблица пользователей, и все мои пользователи имеют уникальный идентификатор. Любой инициированный пользователем разговор между двумя пользователями будет иметь запись в «разговорах», и все сообщения в этом разговоре будут использовать внешние ключи, которые ссылаются этот идентификатор_беседы.

Может ли кто-нибудь придумать какие-либо причины, чтобы не использовать этот подход? Мне интересно, насколько хорошо он будет работать в долгосрочной перспективе, при условии, что я использую индексы и ограничиваю свои запросы ~ 20 результатами для каждой страницы.

+--------+
| users  |
+--------+
|users_id|
|        |
+--------+

+-------------+
|conversations|
+-------------+
|id           |
|user_id1     |
|user_id2     |
+-------------+

+----------------------+
|conversations_messages|
+----------------------+
|id                    |
|conversations_id      | 
|message_body (varchar)|
|message_time (unix timestamp
+----------------------+

Изменить: я понял, что у меня нет возможности отследить отправителя/получателя. Мой первый инстинкт — просто добавить столбец «отправитель» в разговоры_сообщения.


person Casey Flynn    schedule 25.08.2011    source источник
comment
У меня есть опасения по поводу столбцов «user_id1» / «user_id2». Если вы когда-нибудь захотите, чтобы в разговоре участвовало более двух человек, вам придется изменить его, а чтобы найти все разговоры, в которых участвует один пользователь, вам придется проверить оба столбца.   -  person Doug Kress    schedule 25.08.2011
comment
@ Дуг Кресс, это интересный момент. Есть ли у вас предложенные альтернативы?   -  person Casey Flynn    schedule 25.08.2011


Ответы (1)


Посмотрите мой ответ на этот вопрос. Я решаю аналогичную проблему дизайна там. Он включает в себя обработку того, кто просматривал какие сообщения и кто является отправителем каждого сообщения.

person Joel Brown    schedule 25.08.2011
comment
Спасибо @Joel Brown, это был очень хорошо продуманный ответ, который, безусловно, помог мне! - person Casey Flynn; 26.08.2011