ti-enxame.com

Esquema de banco de dados para sistema de notificação semelhante ao Facebook

Estou tentando criar um sistema de notificação semelhante ao facebook e cheguei a uma parede de tijolos. Meu requisito é ser capaz de suportar um número infinito de tipos de notificação que podem ter diferentes tipos de metadados que precisam ser renderizados.

Estou pensando em criar o esquema da seguinte maneira:

**Notification**
Id (int)
TypeId (int)
RecipientId (int)
SenderId (int)
SendDateTime (DateTime)
Read (bool)
MessageData (...Blob?)
Deleted (bool)

**NotificationType**
Id
Name
Description

Eu realmente quero tentar evitar o armazenamento de strings HTML no meu banco de dados, no entanto, também não gosto particularmente de armazenar blobs.

É possível que eu faça uma pesquisa na tabela NotificationType e faça referência a outra tabela que armazena dados específicos para esse tipo, no entanto, isso significaria que toda vez que eu criei um novo tipo de notificação, seria necessário criar uma nova tabela. Acredito que eu também estaria entrando no mundo de ter que escrever SQL dinâmico para obter os dados.

Alguém tem quaisquer sugestões para mim?

26
mcottingham

Aqui está como eu acabei resolvendo esse problema.

Notifications Schema

Decidi usar um dicionário para armazenar dados exclusivos para cada tipo de notificação. Em seguida, serializo esse objeto de dicionário em uma sequência binária e armazeno-o no banco de dados juntamente com cada notificação. Eu tenho um modelo atribuído a cada tipo de notificação que contém espaços reservados, ou seja. '{song-title}' que posso substituir rapidamente por valores do meu objeto de dicionário.

32
mcottingham