Как хранить ссылочные данные

236
26 июля 2021, 06:40

Что бы было проще, объясню на примере чатов. Есть пользовать П1, и есть пользователь П2, они между собой ведут беседу, естественно данные об их беседе храняться в БД, но встал вопрос, как хранить сообщения? И все об сообщении?

К примеру, User1 которые имеет в себе список сообщения Message1, Message2, как этот список хранить в БД? Если же каждое сообщения отвечает за текст, дату отправки/получения, флаг было ли прочитано, и многое другое.

Вижу только один выход, хранить все в каком-то формате, к примеру JSON, а потом хранить в конкретном поле данные об всех сообщениях со всеми пользователями.

Из плюсов:

  • Легко реализуемо
  • Легкий доступ

Из минусов:

  • Каждый раз парсить из этого формата что бы добавить/получить данные слишком долго.
  • Ресурсоемко, при доставании хранить все в ОЗУ (парсить).

К тому же не представляю как будет хранить между разными пользователям, к примеру П1 - П2, П1 - П3, П1 - П4, разве что хранить все в том же поле, но тогда все еще хуже.

Answer 1

Есть автор сообщения, есть получатель сообщения. Они имеют каждый свой ID. Даже группа - имеет свой ID, но может выступать только получателем сообщения.

Исходя из этого и получаем структуру таблицы сообщений:

  • ID автора;
  • ID получателя;
  • содержимое;
  • timestamp создания сообщения;
  • признак доставки;
  • признак прочтения;
  • "многое другое".

Для выборки использовать запрос типа

SELECT * FROM messages
WHERE
   author_id IN (<ID автора>, <ID получателя>) AND
   recipient_id IN (<ID автора>, <ID получателя>)
ORDER BY created_at

Все классически укладывается в реляционную структуру. Так и не понял, в чем у Вас загвоздка-то вышла?

READ ALSO
MariaDB 10.3 тип данных Polygon

MariaDB 10.3 тип данных Polygon

Нужно перенести одну табличку с mysql 55 на mariadb 10

213
Пагинцаия в PHP

Пагинцаия в PHP

Как сделать так, чтоб на странице была пагинация с 1-5 страницу и стрелки, чтоб прыгать по 5 страницhtml сделал, вывод из базы сделал гет запросами...

129
Сортировка массива времен

Сортировка массива времен

Есть возможность отсортировать массив времен вида:

122
Ограничение длины заголовка новости на js в битрикс

Ограничение длины заголовка новости на js в битрикс

Прошу помощи или дать направление куда копатьЕсть задача от заказчика, если в двух словах то заказчик хочет, когда редактор вводит название...

282