2013-02-21 7 views
19

Ich versuche, ein Benachrichtigungssystem ähnlich Facebook zu entwerfen, und ich habe ein bisschen von einer Mauer erreicht. Meine Anforderung besteht darin, eine unbegrenzte Anzahl von Benachrichtigungstypen unterstützen zu können, die unterschiedliche Arten von Metadaten aufweisen, die gerendert werden müssen.Datenbankschema für Benachrichtigungssystem Ähnlich wie Facebook

Ich denke, dass ich das Schema entwerfen wie folgt:

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

**NotificationType** 
Id 
Name 
Description 

Ich will versuchen, wirklich HTML-Strings in meiner Datenbank zu speichern zu vermeiden, aber ich bin auch nicht besonders gern Blobs entweder speichern .

Es ist möglich, dass ich in der NotificationType-Tabelle nachschlagen und auf eine andere Tabelle verweisen kann, die für diesen Typ spezifische Daten speichert. Das würde jedoch bedeuten, dass ich jedes Mal, wenn ich einen neuen Benachrichtigungstyp erstellt habe, einen neuen erstellen müsste Tabelle. Ich glaube, ich würde mich auch in eine Welt begeben, in der ich dynamisches SQL schreiben muss, um die Daten heraus zu bekommen.

Hat jemand irgendwelche Vorschläge für mich?

+0

Ich arbeite an dem gleichen Problem. Ich habe eine ähnliche Struktur wie du, aber ging mit der HTML-Route. In der Beschreibungsspalte habe ich etwas wie . Dann frage ich die Benachrichtigung über user_id ab und benutze JavaScript, um die Nachricht basierend auf span-IDs zu füllen. –

+0

@mcottingham Ich habe mit der gleichen Art von Problem zu tun, dachte ich über etwas Ähnliches nur Speichern als XML, aber es sieht einfach nicht richtig aus ... Ich wünschte, ich könnte einen Blick darauf werfen, wie FB es tat .. – formatc

Antwort

26

Hier ist, wie ich das Problem gelöst habe.

Notifications Schema

Ich beschloss, ein Wörterbuch zu verwenden, um Daten zu speichern, die jeden Benachrichtigungstyp eindeutig ist. Ich serialisiere dann dieses Wörterbuchobjekt in eine binäre Zeichenfolge und speichere diese in der Datenbank zusammen mit jeder Benachrichtigung. Ich habe eine Vorlage für jede Benachrichtigungsart, die Platzhalter enthält, z. '{song-title}', die ich schnell durch Werte aus meinem Wörterbuchobjekt ersetzen kann.

+5

haben Sie das Problem gelöst "Benutzer hat einige Inhalte gelöscht und ich muss alle zugehörigen Notifocations löschen"? – Backs

Verwandte Themen