@dev_family

Как создать структуру таблицы?

БД MySQL

Хочу сделать уведомления для пользователей.

Простейший вид таблицы такой:

id | текст сообщения | сериализованный массив с id пользвателей


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

Какие-то сообщения могут показываться двум пользователям, какие-то 2 тысячам

Ну и перебирать мне так строки все и в массивах искать айди думаю очень скоро станет медленно.

Так вот прошу помощи кто чем может) Как спроектировать подобное?
  • Вопрос задан
  • 3009 просмотров
Пригласить эксперта
Ответы на вопрос 5
Melkij
@Melkij
PostgreSQL DBA
Делаете таблицу прочитанных сообщений со структурой user_id & id_уведомления, PK на оба поля.
Показ уведомлений:
select текст from уведомления left join прочитанные_уведомления on id_уведомления=id and user_id=? where user_id is null

И метите уведомления прочитанными созданием таковых записей.

Или можно инвертировать логику — вносить в таблицу id непрочитанных уведомлений и удалять при прочтении.
Ответ написан
patashnik
@patashnik
messages:
+----+------+
| id | text |
+----+------+

user_messages:
+---------+------------+
| user_id | message_id |
+---------+------------+
Ответ написан
Комментировать
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Так же если сделать id пользователей в виде сериализованного массива с id пользвателей, то в случае возникновения состояния гонки, в сериализованном массиве окажутся некорректные данные.
Тоже считаю, что вариант предложенный Melkij наиболее подходящий в вашем случае.
Ответ написан
Комментировать
@Vampiro
можно не заморачиваться и сделать
user_id, message
А зачем вам возиться с id сообщений? Пользователь либо прочитал все уведомления, и ткнул кнопку «прочитано» (тогда очищаем message), либо не прочитал ничего. Кто-то выборочно читает уведомления и тискает на кнопки?

Но если вам очень хочется правильно + адимнку сообщений и прочие заморочки, то да, придется делать еще одну табличку.
Ответ написан
Комментировать
neyronius
@neyronius
Используйте таблицу связей уведомлений и пользователей — на лицо отношение многие ко многим. После показа удаляйте связь.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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