Задать вопрос
abler98
@abler98
Software Engineer

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

Кто может помочь правильно построить структуру БД диалогов? Я хочу чтоб любой из собеседников мог "мягко" удалить диалог или сообщение, то есть если удаляет один собеседник, то у второго сообщение остается, а если удаляют оба, то сообщение безвозвратно удаляется, тоже самое с самими диалогами.
  • Вопрос задан
  • 3964 просмотра
Подписаться 4 Средний 7 комментариев
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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
Чебуратор тега РНР
Я бы хранил всю переписку во-первых, в одной ячейке, а во-вторых, тупо дублировал бы её. Это, конечно, расход места, но зато просто.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽