2013-02-21 6 views
19

Sto cercando di progettare un sistema di notifica simile a Facebook e ho raggiunto un po 'di un muro di mattoni. Il mio requisito è di essere in grado di supportare un numero infinito di tipi di notifica che possono avere diversi tipi di metadati richiesti per essere resi.Schema di database per sistema di notifica simile a Facebook

sto pensando che io progettare lo schema come segue:

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

**NotificationType** 
Id 
Name 
Description 

voglio davvero cercare di evitare di memorizzare le stringhe HTML nel mio database, però, anche io non sono particolarmente appassionato di memorizzazione blob sia .

È possibile che possa fare una ricerca nella tabella NotificationType e fare riferimento a un'altra tabella che memorizza dati specifici per quel tipo, tuttavia, ciò significherebbe che ogni volta che ho creato un nuovo tipo di notifica avrei bisogno di creare un nuovo tavolo. Credo che anch'io mi troverei nel mondo di dover scrivere SQL dinamico per ottenere i dati.

Qualcuno ha qualche suggerimento per me?

+0

Sto lavorando a questo stesso problema. Ho una struttura simile a te, ma sono andato con la rotta html. Nella colonna della descrizione, ho qualcosa come . Quindi interrogo la notifica tramite user_id e utilizzo JavaScript per popolare il messaggio in base agli ID span. –

+0

@mcottingham Ho a che fare con lo stesso tipo di problema, ho pensato di fare qualcosa di simile solo memorizzandolo come XML, ma non sembra giusto ... Vorrei poter dare un'occhiata per vedere come FB ha fatto .. – formatc

risposta

26

Ecco come ho risolto questo problema.

Notifications Schema

ho deciso di utilizzare un dizionario per memorizzare i dati che è unico per ogni tipo di notifica. Quindi serializzo quell'oggetto dizionario in una stringa binaria e lo memorizzo nel database insieme a ciascuna notifica. Ho un modello assegnato a ciascun tipo di notifica che contiene segnaposto ie. '{song-title}' che posso sostituire rapidamente con i valori del mio oggetto dizionario.

+5

hai risolto il problema "l'utente ha cancellato del contenuto e devo cancellare tutte le notazioni relative"? – Backs