我看到這裏沒有人解決這個事實,通知通常會重新發生,也就是說。即將到來的交易通知總是相同的,但具有不同的交易ID或日期。因此:{你有一個新的即將到來的付款:@paymentID,截止日期爲@dueDate}。 在不同的表有文本也可以
- 幫助,如果你想以後更改通知文本上
- 使得應用多語種更容易,因爲我只是一個語言代碼層通知表和檢索合適的串
因此我也作了表爲那些抽象通知,這是剛下用戶連接用中間表,其中一個通知類型可以在多個時間發送到一個用戶。我還將通知鏈接到用戶,而不是通過外鍵ID,但是我爲所有通知和full_text編制了索引這些代碼的varchar字段的通知代碼,以提高讀取速度。由於這樣的事實,這些通知需要在指定的時間發送,也更容易爲開發人員編寫
NotificationService::sendNew(Notification::NOTE_NEW_PAYMENT, ['paymentId'] => 123, ['dueDate'] => Carbon::now(), 'userIdToSendTo');
現在,因爲我的消息都將在他們的自定義數據,插入到字符串,正如你可以從第二個參數中預先看到的那樣,那麼我將它們存儲在一個數據庫blob中。這樣
$values = base64_encode(serialize($valuesInTextArray));
這是因爲我希望去耦其他表的通知,因此我不想克里特unnessecary從和通知表FK關係,這樣我就可以例如說,通知234連接到交易23,然後加入並獲得該交易ID。解耦可以消除管理這些關係的開銷。缺點是,刪除通知時幾乎不可能,例如刪除一個事務時,但在我的用例中,我決定,這不是必需的。
我將按照以下方式檢索並填充App端的文本。 PS。我正在使用某人的vksprintf函數(https://github.com/washingtonpost/datawrapper/blob/master/lib/utils/vksprintf.php),道具給他!
$valuesToFillInString = unserialize(base64_decode($notification->values));
vksprintf($notificationText->text, $valuesToFillInString)
還要注意哪些字段I指數,因爲我要找到或排序它們
我的數據庫設計如下
============ ==================
表:用戶
==============================
表:通知
- ID(PK )
- USER_ID(FK,索引)
- text_id(FK - NotificationTexts表)
- 值(BLOB)[含有值的陣列,以輸入到所述文本串]
- createdDateTime(日期時間)
- 讀取(布爾值)
[ClusterIndex] =>(USER_ID,createdDateTime)
======================== ======
表:NotificationTexts
- ID(PK)
- text_id(uniquem索引)
- 文本(VARCHAR){你有一個即將到來的新的支付:@paymentID,與@dueDate的到期日}]
- 說明(VARCHAR,可爲空)筆記開發人員,信息欄]
爲什麼需要此連接?只需將閱讀字段放在通知表中,您就可以節省時間和空間。 – ash 2010-07-13 14:17:07
'notificationsread'表格將爲每個用戶只存儲1行。當用戶將他的通知發送到最近的通知ID時,哪個會被更新。 所以我們實際上並不需要這個領域本身。感謝您的評論:) – 2010-07-14 15:08:15
我覺得'Jasie'的意思是說,爲什麼你甚至需要'notificationRead'表。只在''notification'表中添加'readStatus'字段是否有問題?因此,當通知創建時,其'readStatus'爲false,並且只有在用戶打開通知頁面時才變爲'true'。更新了 – 2010-09-23 16:32:59