2013-02-21 8 views
19

Facebook'a benzer bir bildirim sistemi tasarlamaya çalışıyorum ve biraz tuğla duvara ulaştım. Benim ihtiyacım, işlenebilmesi için gerekli farklı türde meta verilere sahip olabilecek sonsuz sayıda bildirim türünü destekleyebilmektir.Bildirim Sistemi için Bildirim Şeması Facebook'a Benzer

ben şöyle ben şema tasarımı edeceğini düşünüyorum:

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

**NotificationType** 
Id 
Name 
Description 
Gerçekten ancak, ben de ya lekeler depolanması özellikle düşkün değilim, benim veritabanında HTML dizeleri depolamak önlemek için denemek istiyorum

.

NotificationType tablosuna bir göz atabilir ve bu türe özgü verileri depolayan başka bir tabloya başvurabilirdim, ancak bu, yeni bir notificationtype oluşturduğum her seferinde yeni bir tane oluşturmam gerektiği anlamına gelir. tablo. Verileri elde etmek için kendimi dinamik SQL yazmak zorunda kalmanın dünyasına gireceğime inanıyorum.

Benim için herhangi bir öneriniz var mı?

+0

Aynı sorun üzerinde çalışıyorum. Sizinle benzer bir yapıya sahibim, ancak html rotası ile gittim. Açıklama sütununda gibi bir şey var. Ardından, user_id aracılığıyla bildirimi sorgularım ve iletiyi span kimliğine dayalı olarak doldurmak için JavaScript'i kullanın. –

+0

@mcottingham Aynı tür bir problemle uğraşıyorum, sadece XML olarak saklamakla benzer bir şey yapmayı düşündüm, ama sadece doğru görünmüyor ... Keşke FB'nin nasıl yaptığını görmek için bir göz atabilirdim. – formatc

cevap

26

Bu sorunu çözdüğüm şudur.

Notifications Schema

Her bildirim türünün benzersiz veri depolamak için bir sözlük kullanmaya karar verdi. Sonra bu sözlük nesnesini bir ikili dizeye serileştirir ve her bildirimle birlikte veritabanında saklar. Yer tutucuları içeren her bir bildirim türüne atanmış bir şablonum var. '{song-title}', sözlük nesnemin değerleriyle hızlı bir şekilde değiştirebileceğim.

+5

sorunu çözdünüz "kullanıcı bazı içeriği sildi ve ilgili tüm notofokasyonları silmek zorundayım"? – Backs