组通知系统的数据库设计

时间:2010-09-30 20:11:33

标签: mysql database database-design notifications jpql

我正在尝试创建群组通知系统。如果我在一个小组中,那么任何评论该组织墙的人都会向每个小组成员发送通知。这是我的数据库设计:我有两个表:NotificationNotificationRead

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

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

每个用户在NotificationRead中都有一个条目,它会跟踪我上次阅读通知的时间。 逻辑是:对于特定用户,如果Notification.time > NotificationRead.lastRead,则该通知被视为未读。假设在group A中,有4个我没有阅读的通知,而他们的time7, 8, 9, 10,那么当我点击group A时,我会设置{{1} (最大的时间),所以我不会再读它们了。新通知的时间将从11开始。现在,这是我的问题。假设我有3组,A,B和C

A(4):最大时间为10
B(1):最大时间是14
C(1):最大时间为12

如果我点击A,我的NotificationRead.lastRead = 10,A旁边的NotificationRead.lastRead = 10清除,B和C旁边的4保持不变。现在,如果我点击B,我的1现在就是14,所以不仅要清除B旁边的lastRead,还要清除自1以来C旁边的1。任何人都可以帮我想办法解决这个问题。我愿意完全重新设计一切

2 个答案:

答案 0 :(得分:1)

你不能只将一个groupID列添加到NotificationRead表中,这样你就知道每个User \ Group组合的lastRead值>?

答案 1 :(得分:1)

如果您想知道每个用户每组的上次通知时间,您必须存储该信息。因此,每个用户必须在NotificationRead中有多个记录,该记录必须与用户表成为一个单独的表。该表将包含三列,即该用户/组的user_id,group_id和lastread值。