Делаю модуль личных сообщений и тут возникло 2 пути развития сюжета.
1) Когда пользователь пишет сообщение в бд летит 1 запись.
Поля таблицы:
id, title, message, sender_id, recipient_id, sender_view, recipient_view, sender_pail, recipient_pail, sender_delete, recipient_delete
и в зависимости от молей отправителя и получателя все это дело обрабатывать.
2) Когда пользователь пишет сообщение в бд летит 2 записи.
Поля таблицы:
id, title, user_id, message, sender_id, recipient_id, view, pail, delete
Подскажите пожалуйста, как кой из вариантов оптимальнее ?
Расскажите поподробнее про поля sender_view, recipient_view, sender_pail, recipient_pail, sender_delete, recipient_delete
Вообще, второй вариант бредовый. Зачем дублировать одну и туже информацию (особенно тяжелое тело сообщения)?
sender_view - это походу лишнее
recipient_view - получатель просмотрел сообщение
sender_pail - отправитель отправил сообщение в корзину
recipient_pail - получатель отправил сообщение в корзину
sender_delete - отправитель удалил сообщение
recipient_delete - получатель получатель удалил сообщение
При таком варианте выходит кучу проверок при отображении сообщений, учитывая кто их там поудалял.
Ну например страница "Все сообщения пользователя".
Я хочу смотреть:
- Все входящие
- Все входящие
- Все удаленные (корзина)
Тоесть, что бы правильно отрендерить эту страницу, я должен проверять кем. является текущий пользователь, и делать дополнительные проверки на возможность просмотра сообщения.
Тоесть в ситуациях: написать письмо, удалить письмо, прочитать письмо, мне нужно проверять кем является текущий пользователь (получатель или отправить) и в зависимости от этого выставлять нужные флаги.
Пример в контроллере для полного удаления сообщения:
@nepster09 я бы вообще сделал немного сложнее.
Таблица messages поля int id, int sender_id, int recipient_id, text content
Таблица user_messages с полями int user_id, int message_id, boolean trash, boolean deleted
Если recipient_id = id_пользователя - письмо в папке входящие
Если sender_id = id_пользователя - письмо в папке отправленные
Если trash = 1 - письмо в папке удаленные
Если deleted = 1 - сообщение полностью удалено и не отображается ни в одной из папок пользователя
Соответственно при создании нового письма создаем 1 запись в таблице messages и 2 записи в user_messages
Можно входящие, отправленные и корзину вообще сделать отдельным полем int folder в таблице user_messages