2011-07-22 91 views
7

我剛讀同一主題以下職位:數據庫來跟蹤用戶通知或活動(臉譜等)

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

一些解決方案中提供的而不是我所需要的東西和它應該如何用於類似Facebook的通知系統。

在通知中,我們經常會有一些鏈接指向採取某些操作的用戶,鏈接到他評論的帖子或視頻,鏈接到任何內容,以及我們在單個通知中包含多個鏈接。

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

有了這個表結構,我們可以顯示單個用戶的所有通知,這是非常穩固的解決方案。但在這種情況下,我們只能顯示純文本通知。我們不能簡單地鏈接到用戶或牆貼。

我試圖想出解決這個問題的辦法。一種是將BB代碼存儲在notification_text屬性中,但是您需要爲網頁和移動應用程序編寫BB代碼解析器。另一個將創建另一個表,從這個通知表派生出來的ID用於我們需要的實體。舉個例子:

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

現在我們可以編寫用於顯示通知的模板(我們不需要在通知表中的文本屬性了現在),然後處理顯示它。我對此解決方案不滿意,因爲從通知表派生的表的數量可能很大(對於每種通知類型)。

我正在尋找點子! :)

回答

8

不幸的是這裏沒有很多答案。我有同樣的問題,並沒有找到任何好的解決方案。數據庫中的繼承總是非常棘手,並且過於複雜。 所以我最終得到了一個簡單的解決方案:將包含在JSON中的資源的鍵值數組存儲在「數據」列中。

事情是這樣的:

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

例如,對於評論的通知,你會存儲

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

然後使用NOTIFICATION_TYPE正確格式化的客戶端數據。

看不到任何缺點,因爲我們只需要客戶端上的資源id來創建url或intents,並且索引的原子字段是無用的。

希望這會有所幫助。

+0

你嘗試用JavaScript讀取json數據嗎?我沒有,但我可以告訴你,當你使用php獲取json數據時,它不能讀取json數據作爲json對象。 PHP將其作爲字符串讀取,並且無法將字符串解碼爲json數據。 –

+1

在php中使用json_decode完美工作 –

+0

然後使用notification_type在客戶端正確格式化數據。看不到任何缺點,因爲我們只需要客戶端上的資源id來創建url或intent,並且索引的原子字段是無用的。希望這可以幫助。 – 2014-02-23 09:07:26