2011-07-22 14 views
7

Właśnie przeczytać poniższe posty na ten sam temat:bazy danych do śledzenia aktywności użytkownika lub powiadomienia (Facebook Like)

Facebook like notifications tracking (DB Design) i Database design to store notifications to users

Niektóre rozwiązania były oferowane, ale nie jest to dokładnie to, czego potrzebuję i jak powinien wyglądać system powiadomień na Facebooku.

W powiadomieniu często mamy linki kierujące do użytkownika, który podjął jakieś działanie, link do wpisu lub filmu, który skomentował, link do czegokolwiek, i mamy kilka linków w jednym powiadomieniu.

notification 
----------------- 
id (pk) 
userid 
notification_type 
notification_text 
timestamp 
last_read 

Dzięki tej strukturze tabeli możemy wyświetlić wszystkie powiadomienia dla pojedynczego użytkownika i jest to całkiem solidne rozwiązanie. Ale w tym przypadku możemy wyświetlić tylko powiadomienia o zwykłym tekście. Nie możemy po prostu połączyć się z użytkownikiem lub postem na ścianie.

Próbuję wymyślić rozwiązanie tego problemu. Jedną z nich jest przechowywanie BB Codes we właściwości notification_text, ale musisz napisać parser kodu BB zarówno dla aplikacji internetowych, jak i mobilnych. Innym byłoby stworzenie innej tabeli, która pochodzi z tej tabeli powiadomień z identyfikatorami dla potrzebnych nam podmiotów. Przykład:

PostCommentNotification : Notification 
---------------------------------------- 
id 
userId (user who commented on a wall post) 
postId (post where comment was made) 

Teraz możemy napisać szablon dla wyświetlania powiadomienia (nie musimy właściwość tekstu w tabeli powiadomień już teraz), a następnie obsługiwać wyświetleniem. Nie jestem zadowolony z tego rozwiązania, ponieważ liczba tabel pochodzących z tabeli powiadomień może być duża (dla każdego typu powiadomienia).

Poszukuję pomysłów! :)

Odpowiedz

8

Niestety nie ma tu wielu odpowiedzi. Miałem ten sam problem i nie znalazłem żadnego dobrego rozwiązania. Dziedziczenie w bazach danych zawsze jest trudne i zbyt skomplikowane. W efekcie otrzymałem proste rozwiązanie: przechowywanie tablicy wartości kluczy zapakowanych w JSON w kolumnie "data".

coś takiego:

notification 
----------------- 
id (pk) 
userid 
notification_type 
notification_data 
timestamp 
last_read 

Na przykład, w przypadku zgłoszenia uwag, będziesz przechowywać

[{"author_id": "1234", "comment_id":"1234"}] 

Następnie użyć NOTIFICATION_TYPE poprawnie formatować swoje dane na stronie klienta.

Nie widzimy żadnych wad, ponieważ potrzebujemy tylko identyfikatora zasobów na kliencie do tworzenia adresów URL lub intencji, posiadanie pól atomowych dla indeksów jest bezużyteczne.

Mam nadzieję, że to pomoże.

+0

Czy próbowałeś odczytać dane json za pomocą javascript? Nie mogłem, ale mogę ci powiedzieć, że kiedy dostajesz dane json z php, to nie może odczytać danych json jako obiektu json. php odczytuje go jako ciąg i nie może dekodować łańcucha jako danych json. –

+1

Działa perfekcyjnie w php przy użyciu json_decode –

+0

Następnie należy użyć parametru notification_type, aby poprawnie sformatować dane po stronie klienta. Nie widzę żadnych wad, ponieważ potrzebujemy tylko identyfikatora zasobów na kliencie do tworzenia adresów URL lub intencji, posiadanie pól atomowych dla indeksów jest bezużyteczne. Mam nadzieję że to pomoże. –

Powiązane problemy