我認爲有必要爲用戶通知取消規範化數據庫。例如,在標記帖子(應由用戶考慮)時,我們添加一列flag ENUM('yes', 'no')
(或狀態欄)。爲用戶查找標記的事件可以通過使用user_id='XX' AND flag='yes'
的WHERE子句進行計數。如何爲用戶通知取消規範化mysql數據庫?
這種標準化的結構很好;但是如果我們有不同類型的通知呢?例如標記的帖子,評論,照片......這意味着我們需要在用戶剛剛訪問他的個人資料頁面時計數幾張表格。這對於像stackexchange這樣的交叉項目更爲嚴重,因爲我們爲不同的網站收到通知。
我覺得去正常化可以幫助通知列作爲
post_flags tinyint(3),
comment_flags tinyint(3),
photo_flags tinyint(3),
添加到用戶表在這種情況下,我們需要爲每個相應的行動更新用戶標誌列行進的額外寫入查詢。例如,標記帖子時:UPDATE users SET post_flags=post_flags+1 WHERE user_id='XX'
。我擔心的是確保執行後一個查詢,以避免此數字與標記的帖子數量之間的不匹配;但我認爲可以通過TRANSACTION
來保證。
通過這種方式,我們可以通過一次查詢獲取所有通知,查看經常訪問的個人資料頁面。
我在正確的軌道上嗎?或者另一個棘手的方法是常見的這個目的?
你打算在'tinyint(3)'中存儲什麼?沒有多個條目? – 2012-02-28 13:23:58
通知的數量。例如,在標記帖子時,我們將運行查詢UPDATE users SET post_flags = post_flags + 1 WHERE user_id ='XX'' – Googlebot 2012-02-28 13:31:29
「flag ENUM('yes','no')」 - 爲什麼不使用1和0的INT ? – Ivan 2012-02-28 13:45:33