database facebook database-design notifications storage

database - Base de datos para rastrear notificaciones de usuarios o actividad(como Facebook)



database-design notifications (1)

Acabo de leer las siguientes publicaciones sobre el mismo tema:

Facebook como el seguimiento de notificaciones (diseño de DB) y el diseño de la base de datos para almacenar notificaciones a los usuarios

Se ofrecieron algunas soluciones, pero no exactamente lo que necesito y cómo debería ser para un sistema de notificación similar a Facebook.

En una notificación, a menudo tenemos algunos enlaces que apuntan al usuario que realizó alguna acción, un enlace a una publicación o video que comentó, un enlace a cualquier cosa y, a menudo, tenemos varios enlaces en una sola notificación.

notification ----------------- id (pk) userid notification_type notification_text timestamp last_read

Con esta estructura de tabla, podemos mostrar todas las notificaciones para un solo usuario y es una solución bastante sólida. Pero en este caso, solo podemos mostrar una notificación de texto sin formato. No podemos simplemente vincular a un usuario o una publicación en el muro.

Estoy tratando de encontrar una solución a este problema. Una de ellas es almacenar los códigos BB en la propiedad notification_text, pero luego debe escribir el analizador de código BB para aplicaciones web y móviles. Otra sería la creación de otra tabla que se deriva de esta tabla de notificación con ID para las entidades que necesitamos. Un ejemplo:

PostCommentNotification : Notification ---------------------------------------- id userId (user who commented on a wall post) postId (post where comment was made)

Ahora podemos escribir una plantilla para mostrar la notificación (ya no necesitamos la propiedad de texto en la tabla de notificaciones) y luego manejar mostrarla. Tampoco estoy satisfecho con esta solución, ya que el número de tablas que se derivan de la tabla de notificaciones podría ser grande (para cada tipo de notificación).

Estoy buscando ideas! :)


Lamentablemente, no hay muchas respuestas aquí. Tuve el mismo problema y no encontré ninguna buena solución. La herencia en las bases de datos siempre es complicada y se vuelve compleja demasiado rápido. Así que terminé con una solución simple: almacenar un conjunto de recursos de valores clave envueltos en JSON en una columna de "datos".

Algo como esto:

notification ----------------- id (pk) userid notification_type notification_data timestamp last_read

Por ejemplo, para una notificación de comentarios, almacenará

[{"author_id": "1234", "comment_id":"1234"}]

Luego usa el tipo de notificación para formatear correctamente sus datos en el lado del cliente.

No se pueden ver inconvenientes, ya que solo necesitamos la identificación de recursos en el cliente para crear urls o intents, tener campos atómicos para los índices es inútil.

Espero que esto ayude.