abler98
@abler98
Software Engineer

Структура БД диалогов: как построить?

Кто может помочь правильно построить структуру БД диалогов? Я хочу чтоб любой из собеседников мог "мягко" удалить диалог или сообщение, то есть если удаляет один собеседник, то у второго сообщение остается, а если удаляют оба, то сообщение безвозвратно удаляется, тоже самое с самими диалогами.
  • Вопрос задан
  • 3962 просмотра
Решения вопроса 1
WebSpider
@WebSpider
Можно сделать поле (например, deleted) с битовой маской
00b - видно всем
01b - удалил кто-то один (например, отправитель сообщения)
10b - удалил, соответственно, получатель сообщения
11b - удалили оба, можно удалять запись из базы (например, скриптом по крону, либо сразу проверять условие в момент удаления пользователем)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@NataliaCh
когда-то реализовывала простой обмен личными сообщениями на одном сайте.
обошлась одной таблицей. Работает уже три года. Записей на данный момент около 100 тысяч
Может мой вариант кому и пригодится.

структура таблицы:
mail_id
mail_userid_from - id отправителя
mail_userid_to - id получателя
mail_text - текст сообщения
mail_data - дата отправки
mail_status - прочитано или нет получателем - чтобы выводить количество непрочитанных сообщений
mail_delete_userfrom - удалено/нет отправителем
mail_delete_userto - удалено/нет получателем

последние два поля как раз отвечают за "мягкое удаление". По умолчанию там нули. Если юзер удалил сообщение, то выставляется 1 и сообщение данному юзеру не показывается. Теоретически, если в обоих полях по 1, то можно грохать из таблицы такие записи.
Ответ написан
Комментировать
FanatPHP
@FanatPHP
Чебуратор тега РНР
Я бы хранил всю переписку во-первых, в одной ячейке, а во-вторых, тупо дублировал бы её. Это, конечно, расход места, но зато просто.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы