41 votes

Facebook comme le suivi des notifications (DB Design)

J'essaie juste de comprendre comment la base de données de Facebook est structurée pour suivre les notifications.

N'ira pas beaucoup dans la complexité comme Facebook. Si nous imaginons une structure de table simple pour les notifications

notifications (id, id utilisateur, mise à jour, heure);

Nous pouvons recevoir les notifications d'amis en utilisant

 SELECT `userid`, `update`, `time`
FROM `notifications`
WHERE `userid` IN 
(... query for getting friends...)
 

Cependant, quelle devrait être la structure du tableau pour vérifier quelles notifications ont été lues et lesquelles ne l'ont pas été?

41voto

Je ne sais pas si c'est la meilleure façon de le faire, mais depuis je n'ai pas d'idées de quelqu'un d'autre, c'est ce que j'allais faire. J'espère que cette réponse pourrait aider d'autres personnes aussi bien.

Nous avons 2 tables

notification
-----------------
id (pk)
userid
notification_type (for complexity like notifications for pictures, videos, apps etc.)
notification
time


notificationsRead
--------------------
id (pk) (i dont think this field is required, anyways)
lasttime_read
userid

L'idée est de sélectionner les notifications à partir des notifications de table et de rejoindre le notificationsRead de table et de vérifier la dernière notification de lecture et des lignes avec ID > notificationid. Et à chaque fois la page des notifications est ouvert mise à jour de la ligne de notificationsRead table.

La requête de notifications non lues je pense être comme ça..

SELECT `userid`, `notification`, `time` from `notifications` `notificationsRead`
WHERE 
`notifications`.`userid` IN ( ... query to get a list of friends ...) 
AND 
(`notifications`.`time` > (
    SELECT `notificationsRead`.`lasttime_read` FROM `notificationsRead` 
    WHERE `notificationsRead`.`userid` = ...$userid...
))

La requête ci-dessus n'est pas vérifiée. Merci pour l'idée de la conception bd de @espais

9voto

espais Points 2025

Vous pouvez ajouter une autre table ...

 tblUserNotificationStatus
-------------------------
- id (pk)
- notification_id
- user_id
- read_status (boolean)
 

Si vous souhaitez conserver un historique, vous pouvez conserver les X dernières notifications et supprimer les autres qui sont plus anciennes que votre dernière notification dans la liste ....

7voto

Joe Mabel Points 618

Si, lorsque vous donnez des notifications, vous donnez toutes les notifications pertinentes disponibles à ce moment-là, vous pouvez simplifier cela en attachant des horodatages aux événements notifiables et en gardant une trace de la dernière fois où chaque utilisateur a reçu des notifications. Si vous êtes dans un environnement multi-serveurs, cependant, vous devez faire attention à la synchronisation. Notez que cette approche ne nécessite pas de véritables horodatages, juste quelque chose qui augmente de façon monotone.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X