2013-02-21 83 views
19

我想設計一個類似於facebook的通知系統,我已經達到了一個磚牆。我的要求是能夠支持無限數量的可能需要呈現不同類型的元數據的通知類型。用於通知系統的數據庫模式類似於Facebook

我在想,我將設計模式如下:

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

**NotificationType** 
Id 
Name 
Description 

我真的想盡量避免存放在我的數據庫HTML字符串,不過,我也不是特別喜歡存儲BLOB任。

有可能我可以查看NotificationType表並引用另一個存儲特定於該類型的數據的表,但是,這意味着每次創建新的通知類型時,我都需要創建一個新的表。我相信我也會讓自己陷入一個不得不編寫動態SQL來獲取數據的世界。

有沒有人對我有任何建議?

+0

我正在處理同樣的問題。我和你有類似的結構,但是使用html路由。在說明欄中,我有一些像。然後我通過user_id查詢通知,並使用JavaScript根據span id填充消息。 – 2013-02-26 05:42:30

+0

@mcottingham我正在處理同樣的問題,我想過做類似的事情,只是將它存儲爲XML,但它看起來不正確......我希望我可以窺視一下FB如何做到這一點。 – formatc 2013-08-07 20:19:00

回答

26

下面是我最終解決這個問題的方法。

Notifications Schema

我決定使用的字典來存儲是唯一的每個通知類型的數據。然後,將該字典對象序列化爲二進制字符串,並將其與每個通知一起存儲在數據庫中。我有一個模板分配給每個包含佔位符的通知類型,即。 '{song-title}',我可以用我的字典對象中的值快速替換。

+5

你解決了問題「用戶刪除了一些內容,我必須刪除所有相關的notofocations」? – Backs 2015-12-17 15:26:29