Разработка базы данных для системы групповых уведомлений

0

Я пытаюсь создать систему уведомления групп. Если я нахожусь в группе, то любой, кто комментирует стену группы, отправляет уведомление каждому члену группы. Вот мой дизайн базы данных: у меня две таблицы: Notification и NotificationRead.

NotificationRead
+userId (String)
+lastRead (int) - default is 0

Notification
...
+time(int)
...

Каждый пользователь имеет одну запись в NotificationRead, он отслеживает, когда я последний раз читаю свое уведомление. Логика: для конкретного пользователя, если Notification.time > NotificationRead.lastRead, то это уведомление считается непрочитанным. Скажем, что в group A есть 4 уведомления, которые я не читал, а их time - 7, 8, 9, 10, тогда, когда я нажимаю на group A, я устанавливаю свой NotificationRead.lastRead = 10 (наибольшее время), поэтому я не буду читать их снова. У новых уведомлений будет время время начиная с 11. Теперь вот моя проблема. Пусть говорят, что у меня 3 группы, A, B и C

A (4): наибольшее время - 10
B (1): наибольшее время - 14
C (1): наибольшее время составляет 12

если я нажимаю на A, мой NotificationRead.lastRead = 10, 4 рядом с A clear off, 1 рядом с B и C остаются. Теперь, если я нажимаю на B, мой lastRead теперь равен 14, поэтому он не только отключает 1 рядом с B, но также и 1 рядом с C с 14 > 12. Может ли кто-нибудь помочь мне подумать о том, как это решить. Я открыт, чтобы полностью перепроектировать все.

Теги:
database
notifications
database-design
jpql

2 ответа

1

Нельзя добавить столбец groupID в свою таблицу NotificationRead, чтобы вы знали значение lastRead для каждой комбинации User\Group > ?

  • 0
    Отличная идея. Спасибо +1
1

Если вы хотите узнать последнее время уведомления для каждого пользователя на группу, вы должны сохранить эту информацию. Поэтому каждый пользователь должен иметь более одной записи в NotificationRead, которая должна стать отдельной таблицей из таблицы пользователя. Эта таблица будет содержать три столбца: user_id, group_id и последнее значение для этого пользователя/группы.

  • 0
    Я столкнулся с проблемой с этим подходом. Прежде всего, я ищу все непрочитанные уведомления, затем создаю hashMap , чтобы отобразить список непрочитанных уведомлений в список групп. ИМХО, это быстрее, чем зацикливать мой список групп и снимать запрос к базе данных. (Пожалуйста, прочитайте ниже)
  • 0
    (Пожалуйста , сначала прочитайте выше) Теперь , как я искать все непрочитанные уведомления является Notification.time > NotificationRead.lastRead , которые имеют смысл , поскольку lastRead ассоциированного с уникальным userId . Но теперь lastRead связывается с userId and groupId , то есть существует несколько lastRead per userId, cant do Notification.time> NotificationRead.lastRead`
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню