database design - Esquema de la base de datos para el sistema de notificación similar a Facebook
database-design notifications (1)
Estoy tratando de diseñar un sistema de notificación similar a Facebook y he alcanzado un poco de un muro de ladrillos. Mi requisito es poder admitir un número infinito de tipos de notificación que pueden tener diferentes tipos de metadatos requeridos para ser procesados.
Estoy pensando que voy a diseñar el esquema de la siguiente manera:
**Notification**
Id (int)
TypeId (int)
RecipientId (int)
SenderId (int)
SendDateTime (DateTime)
Read (bool)
MessageData (...Blob?)
Deleted (bool)
**NotificationType**
Id
Name
Description
Realmente quiero tratar de evitar el almacenamiento de cadenas HTML en mi base de datos, sin embargo, tampoco me gusta mucho almacenar blobs.
Es posible que pueda buscar en la tabla NotificationType y hacer referencia a otra tabla que almacene datos específicos de ese tipo; sin embargo, eso significaría que cada vez que cree un nuevo tipo de notificación, necesitaré crear una nueva tabla. Creo que también me estaría metiendo en un mundo de tener que escribir SQL dinámico para obtener los datos.
¿Alguien tiene alguna sugerencia para mi?
Así es como terminé resolviendo este problema.
Decidí usar un diccionario para almacenar datos que son únicos para cada tipo de notificación. Luego serializo ese objeto de diccionario en una cadena binaria y lo almaceno en la base de datos junto con cada notificación. Tengo una plantilla asignada a cada tipo de notificación que contiene marcadores de posición, es decir. ''{song-title}'' que puedo reemplazar rápidamente con los valores de mi objeto de diccionario.